欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

B. Dima and a Bad XOR

程序员文章站 2022-03-25 20:25:43
...

B. Dima and a Bad XOR

题解:
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<<" ";
           }
       }
   }
}