来源:牛客网
小红希望你构造一个nnn行mmm列的矩阵,满足所有元素之和恰好等于xxx,且每行、每列的异或和全部相等。你能帮帮她吗?
输入描述:
三个正整数n,m,x,用空格隔开。
4≤n,m≤1000,m≤1000
2≤x≤109
保证x是偶数。
输出描述:
如果无解,请输出 -1。
否则输出n行,每行输出m个非负整数,代表一个合法解。有多解时输出任意即可。
示例1
输入
复制
4 4 4
输出
复制
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
说明
每行和每列的异或和均为 1。
#include<bits/stdc++.h> using namespace std; int n,m,x; int main(){ int i,j,k,flag=0; cin>>n>>m>>x; if(n==m && x%n==0){ for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ if(j==i){ cout<<x/n<<" "; } else{ cout<<0<<" "; } } cout<<endl; } return 0; } for(k=4;k<=2*min(n,m);k+=2){ if(x%k==0){ flag=k; break; } } if(flag==0){ cout<<-1<<" "; return 0; } for(i=1;i<=n;i++){ if(i<flag/2){ for(j=1;j<=m;j++){ if(j==i || j==i+1){ cout<< x/flag<<" "; } else{ cout<<0<<" "; } } } if(i==flag/2){ for(j=1;j<=m;j++){ if(j==flag/2 || j==1){ cout<<x/flag<<" "; } else{ cout<<0<<" "; } } } if(i>flag/2){ for(j=1;j<=m;j++){ cout<<0<<" "; } } cout<<endl; } return 0; }