链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
小红希望你构造一个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;
}