seriruの技術屋ブログ

競技プログラミングやゲーム開発など技術に関することを発信します

diverta 2019 Programming Contest B RGB Boxes

問題

atcoder.jp

問題概要

 Rr + Gg + Bb = N となる  (r, g, b) の組の総数を求めよ。

考察 and 解説

 1 \leq R, G, B, N \leq 3000 であるので、 3重ループによる全探索は間に合いません。

よって、 2重ループで  r, g の組を総当たりし、 Bb = N - Rr - Gg となる  b が存在するかを調べれば良いです。

類題

abc085.contest.atcoder.jp

提出コード

#include <iostream>
using namespace std;

int main() {
  int r,g,b,n;
  cin >> r >> g >> b >> n;

  int rmax = n / r;
  ll ans = 0;
  for (int i = 0; i <= rmax; ++i) {
    int rem = n - i * r;
    int gmax = (rem / g) + 1;
    for (int j = 0; j <= gmax; ++j) {
      int remain = rem - j * g;
      if (remain >= 0 and remain % b == 0) ans += 1;
    }
  }
  cout << ans << endl;
}