Codeforces Round 857 (Div. 2) C-The Very Beautiful Blanket

发布时间 2023-03-22 21:10:45作者: HikariFears

题目地址

题意:构造一个二维数组,使得任意一个4*4的子矩阵满足:

A11A12A21A22=A33A34A43A44

A13A14A23A24=A31A32A41A42

Solution(思路来源:知乎xioachou)

对于4个数来说,任意一个二进制位上的1和0都为偶数,此时他们异或一定为0

那么我们构造出第一行为0,1,2,...,m-1,剩下的每一个数都给上一行的数加上1<<10,最后一定满足条件

 1 int a[205][205];
 2 void solve()
 3 {
 4     int n,m;cin>>n>>m;
 5     cout<<n*m<<"\n";
 6     int cnt=1<<9;
 7     a[1][1]=0;
 8     a[1][2]=1;
 9     for(int i=3;i<=200;i++)
10     {
11         a[1][i]=i-1;
12     }
13     for(int i=2;i<=200;i++)
14     {
15         for(int j=1;j<=200;j++)
16         {
17             a[i][j]=a[i-1][j]+cnt;
18         }
19     }
20     /*for(int i=1;i<n;i++)
21     {
22         for(int j=1;j<m;j++)
23         {
24             cout<<(((a[i][j]^a[i][j+1])^a[i+1][j])^a[i+1][j+1])<<" ";
25         }
26         cout<<"\n";
27     }*/
28     
29     for(int i=1;i<=n;i++)
30     {
31         for(int j=1;j<=m;j++)
32         {
33             cout<<a[i][j]<<" ";
34             
35         }
36         cout<<"\n";
37     }
38     
39 }
View Code