http://code-festival-2017-quala.contest.atcoder.jp/tasks/code_festival_2017_quala_b
解説
http://code-festival-2017-quala.contest.atcoder.jp/submissions/1619716
横で反転させる個数を全探索する。
i行反転させたとすると、1列反転させることで、(N-i)増え、iだけ減る。
そのため、変化量dは(N - 1)-iであり、必要な黒マスの個数と増加量から後何回縦で反転させればいいかを見つける。
ピッタリにできるならYes
int N, M, K; //-------------------------------------------------------------------------------------------------- void _main() { cin >> N >> M >> K; rep(i, 0, N + 1) { int painted = i * M; int d = (N - i) - i; // painted + d * n = K // d * n = K - painted if (d == 0 && (K - painted) == 0) { printf("Yes\n"); return; } if(d) if (0 <= K - painted) if ((K - painted) % d == 0) { int n = (K - painted) / d; if (0 <= n && n <= M) { printf("Yes\n"); return; } } } printf("No\n"); }