https://www.hackerrank.com/contests/oyamac/challenges/sumsumsum
解説
https://www.hackerrank.com/contests/oyamac/challenges/sumsumsum/submissions/code/1321978637
まずは全探索を考えてみよう。
ABCDxyzは全部整数でなので、等式になるためにはxyzも最大はDまで考えればいい。
よって、xyzの全探索は109通りとなる。
これは間に合わない。
少し工夫をしよう。
Ax + By + Cz = D Cz = D - Ax - By z = (D - Ax - By) / C
このように変換してみると、xyが決まればzは一意に定まることが分かる。
なので、等式を満たすxyzを全探索するにはxyの全探索で106通りを考えればいい。
これは間に合う。
よって、xyを全探索し、zが整数で0以上のものを答えとしてカウントしていくと答え。
int A, B, C, D; //--------------------------------------------------------------------------------------------------- void _main() { cin >> A >> B >> C >> D; int ans = 0; rep(x, 0, D + 1) rep(y, 0, D + 1) if ((D - A * x - B * y) % C == 0) { int z = (D - A * x - B * y) / C; if (0 <= z) ans++; } cout << ans << endl; }