제출 #1168288

#제출 시각아이디문제언어결과실행 시간메모리
1168288UmairAhmadMirza새로운 문제 (POI13_spa)C++20
0 / 100
345 ms23896 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
int const N=61;
int const mod=1e9+7;

int n,k;
int pw[N];
set<int> rem;

bool check(int sr,int tg){
	set<int> vis;
	for(int i:rem)
		vis.insert(i);
	stack<int> st;
	st.push(sr);
	vis.insert(sr);
	while(!st.empty()){
		int nd=st.top();
		st.pop();
		for(int i=0;i<n;i++)
			if(vis.find(nd^pw[i])==vis.end()){
				vis.insert(nd^pw[i]);
				st.push(nd^pw[i]);
				if(tg==nd^pw[i])
					return 1;
			}
	}
	return 0;
}


signed main(){
	cin>>n>>k;
	pw[0]=1;
	for (int i = 1; i < N; ++i)
		pw[i]=(pw[i-1]*2);
	string xx,yy;
	cin>>xx>>yy;
	int x=0,y=0;
	for(int i=0;i<n;i++){
		x+=pw[i]*(xx[i]=='1');
		y+=pw[i]*(yy[i]=='1');
	}
	for (int i = 0; i < k; ++i)
	{
		string c;
		cin>>c;
		int a=0;
		for (int i = 0; i < n; ++i)
			a+=pw[i]*(c[i]=='1');
		rem.insert(a);
	}
	if(check(x,y) && check(y,x))
		cout<<"TAK"<<endl;
	else
		cout<<"NIE"<<endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...