题意:
构造一个n*n 的矩阵 满足, 任意一个子矩阵 的4个角 不能全是1 , 且满足 1 的个数>= 85000.
例如当n=5时,分为五大板块,构造一个n*n的矩阵如下:
i/j | 0 1 2 3 4
0 | 10000 10000 10000 10000 10000
1 | 10000 01000 00100 00010 00001
2 | 10000 00100 00001 01000 00010
3 | 10000 00010 01000 00001 00100
4 | 10000 00001 00010 00100 01000
5 | 01000 01000 01000 01000 01000
6 | 01000 00100 00010 00001 10000
.....
规律就是每一行每一个方块的1位置每次都会加上i然后去模n
五行一轮回后将第一次的内容全部往右挪一位就好
而我们这里选最接近根号2000的质数47,才能避免重复
代码:
#include<bits/stdc++.h>
using namespace std;
int a[3000][3000];
int main(){
int n=47;
printf("2000\n");
for(int i=0;i<n*n;i++){
int d=i/n-i;
for(int j=0;j<n;j++){
d+=i;
d=d%n;
for(int k=0;k<n;k++){
if(k==d){
a[i][j*n+k]=1;
}
}
}
}
for(int i=0;i<2000;i++){
for(int j=0;j<2000;j++){
printf("%d",a[i][j]);
}
printf("\n");
}
}