http://codeforces.com/contest/1151/problem/B
题意:
给一个矩阵,只要找到每一列的任意一个异或和大于0,就找到解并返回,输出TAK和位置,没找到就输出NIE
题解:
先找到每一列第一个异或和 ,如果为零就只要一旦找到有一个数异或不为零就输出TAK和位置。
#include<iostream> #include<algorithm> using namespace std; int main(){ int n,m,a[505][505]; cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>a[i][j]; } } int sum=0; for(int i=0;i<n;i++){ sum^=a[i][0]; } if(sum!=0){ cout<<"TAK"<<endl; for(int i=0;i<n;i++){ if(i!=0) cout<<" "; cout<<1; } return 0; } for(int i=0;i<n;i++){ for(int j=1;j<m;j++){ if(a[i][j]!=a[i][0]){ cout<<"TAK"<<endl; for(int z=0;z<i;z++){ cout<<1<<" "; } cout<<j+1; for(int z=i+1;z<n;z++){ cout<<" 1"; } return 0; } } } cout<<"NIE"<<endl; return 0; }