ビンゴしている列が 個でもあってはならないので、穴があいていないマスは最低でも 個必要です。
基本的にはこの穴があいていないマスを左上から右下に向かう対角線上に 個ずつ配置していくことにより、多くの行や列でビンゴを防ぐことができます。
が奇数の場合は以上の構築方法で題意を満たすことができますが、実は が偶数の場合は右上から左下に向かう対角線でビンゴが成立してしまいます。
これを防ぐ方法は複数考えられますが、一つの方法として 行目と 行目を入れ替えるという方法が考えられます。
以上の構築方法でほとんどのケースで AC
を得ることができますが、実は の場合にのみ WA
になってしまいます。
これは、 のケースでは、穴のあいていないマスが つ必要になるためです。
の場合のみ別途処理を加えることで AC
を得ることができます。
xxxxxxxxxx
using namespace std;
int main() {
int n;
cin >> n;
vector<string> ans(n, string(n, '#'));
for (int i = 0; i < n; i++) ans[i][i] = '.';
if (n == 2) ans[0][1] = '.';
if (!(n & 1)) swap(ans[0], ans[n - 1]);
for (auto s : ans) cout << s << '\n';
}