C. Magic Grid 构造矩阵

Posted -citywall123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Magic Grid 构造矩阵相关的知识,希望对你有一定的参考价值。

C. Magic Grid

time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Let us define a magic grid to be a square matrix of integers of size n×nn×n, satisfying the following conditions.

  • All integers from 00 to (n21)(n2−1) inclusive appear in the matrix exactly once.
  • Bitwise XOR of all elements in a row or a column must be the same for each row and column.

You are given an integer nn which is a multiple of 44. Construct a magic grid of size n×nn×n.

Input

The only line of input contains an integer nn (4n10004≤n≤1000). It is guaranteed that nn is a multiple of 44.

Output

Print a magic grid, i.e. nn lines, the ii-th of which contains nn space-separated integers, representing the ii-th row of the grid.

If there are multiple answers, print any. We can show that an answer always exists.

Examples
input
Copy
4
output
Copy
8 9 1 13
3 12 7 5
0 2 4 11
6 10 15 14
input
Copy
8
output
Copy
19 55 11 39 32 36 4 52
51 7 35 31 12 48 28 20
43 23 59 15 0 8 16 44
3 47 27 63 24 40 60 56
34 38 6 54 17 53 9 37
14 50 30 22 49 5 33 29
2 10 18 46 41 21 57 13
26 42 62 58 1 45 25 61
Note

In the first example, XOR of each row and each column is 1313.

In the second example, XOR of each row and each column is 6060.

 

 题意:构造一个这样的矩阵:第 i 行的异或和==第 i 列的异或和

 

题解:若已知一个满足题意的矩阵,对这个矩阵的每一个数加上一个4的倍数依然满足题意,又因为n是4的倍数,所以不断用这样的4*4矩阵凑成一个n*n的矩阵即可

 

#include<iostream>
#include<algorithm>
using namespace std;
int a[1024][1024];
int main()

    int n,cnt=0;
    cin>>n;
    for(int i=1;i<=n;i=i+4)
    
        for(int j=1;j<=n;j=j+4)
        
            for(int x=0;x<4;x++)
            
                for(int y=0;y<4;y++)
                
                    a[i+x][j+y]=cnt++;
                
            
        
    
    for(int i=1;i<=n;i++)
    
        for(int j=1;j<=n;j++)
        
            if(j==1)
                cout<<a[i][j];
            else
                cout<< <<a[i][j];
        
        cout<<endl;
    
    return 0;

 

以上是关于C. Magic Grid 构造矩阵的主要内容,如果未能解决你的问题,请参考以下文章

Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) C. Magic Grid

Codeforces Round #719 (Div. 3) C. Not Adjacent Matrix

Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)

agc004cAND Grid

Magic Gems(矩阵快速幂优化dp)

CodeForces 710C Magic Odd Square