B. Dima and a Bad XOR
程序员文章站
2022-03-25 20:25:43
...
题解:
Let’s take the first number in each array.
Then, if we have current XOR strictly greater than zero we can output an answer.
And if there is some array, such that it contains at least two distinct numbers, you can change the first number in this array to number, that differs from it, and get XOR 0⊕x>0.
Else, each array consists of the same numbers, so all possible XORs are equal to 0, and there is no answer.
Complexity is O(n⋅m)
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<set>
#include<map>
#include<iterator>
#include<queue>
#include<vector>
#include<string>
using namespace std;
typedef long long ll;
const int N=1e6+10;
const long long INF=1e18;
const double eps=0.0000001;
const ll mod=1000000007;
int a[600][600];
int vis[600][2];
vector<int>cup;
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>a[i][j];
if(j==0)
vis[i][0]=a[i][0];
if(a[i][j]!=vis[i][0])
vis[i][1]=j;
}
int ans=0;
for(int i=0;i<n;i++)
{
ans=ans^a[i][0];
}
if(ans!=0)
{
cout<<"TAK"<<endl;
for(int i=0;i<n;i++)
cout<<1<<" ";
}
else
{
int flag=-1;
for(int i=0;i<n;i++)
{
if(vis[i][1]!=0)
{
cout<<"TAK"<<endl;
flag=i;
break;
}
}
if(flag==-1)
{
cout<<"NIE"<<endl;
}
else
{
for(int i=0;i<n;i++)
{
if(i==flag)
cout<<vis[i][1]+1<<" ";
else
cout<<1<<" ";
}
}
}
}