https://beta.atcoder.jp/contests/arc093/tasks/arc093_b
解法
https://beta.atcoder.jp/contests/arc093/submissions/2257474
発想問題。
上半分を全て白に、下半分を全て黒にした盤面を用意する。
これで白の連結成分は1つで黒の連結成分も1つである。
白色の連結成分を増やしたい場合は、全て黒にした盤面に点を1つずつ打っていけば、白の連結成分だけを1つずつ増やせる。
黒の連結成分を増やす場合も同様にやればいい。
以下のコードでは上から順に作っているが、全て塗って、更新していく方が実装は楽そう。
int A, B; vector<string> S; //--------------------------------------------------------------------------------------------------- void _main() { cin >> A >> B; A--; B--; { string s = ""; rep(x, 0, 100) s += "."; S.push_back(s); rep(i, 0, 10) { int y = 1 + i * 2; string s = ""; rep(x, 0, 50) { s += "."; if (B) { s += "#"; B--; } else s += "."; } S.push_back(s); s = ""; rep(x, 0, 100) s += "."; S.push_back(s); } } { string s = ""; rep(x, 0, 100) s += "#"; S.push_back(s); rep(i, 0, 10) { int y = 1 + i * 2; string s = ""; rep(x, 0, 50) { s += "#"; if (A) { s += "."; A--; } else s += "#"; } S.push_back(s); s = ""; rep(x, 0, 100) s += "#"; S.push_back(s); } } int n = S.size(); printf("%d %d\n", n, 100); rep(y, 0, n) printf("%s\n", S[y].c_str()); }