-
题目:Holding Two
- 题意:构造一个n * m的01矩阵使得每行、每列、每条斜线任意相邻的三个数不能相同。
- 解析:每行和每列满足条件实际上还是比较容易的,但是斜线不太容易满足,可以构造一个矩阵(正好错开三个0或三个1):
- 1001
- 0110
- 矩阵变大:
- 10011001
- 01100110
- 10011001
- 01100110
- 代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int a[N][N];
int n, m;
int p[2][4]{
1, 0, 0, 1,
0, 1, 1, 0
};
int main()
{
cin >> n >> m;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
a[i][j] = p[i % 2][j % 4];
}
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
cout << a[i][j];
cout << endl;
}
return 0;
}