제출 #1168341

#제출 시각아이디문제언어결과실행 시간메모리
1168341UmairAhmadMirzaWalk (POI13_spa)C++20
100 / 100
1081 ms36248 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);
	vector<int> st;
	st.push_back(sr);
	vis.insert(sr);
	while(st.size()>0){
		int nd=st.back();
		st.pop_back();
		if(nd==tg)
			return 1;
		for(int i=0;i<n;i++){
			int nw=(nd^(pw[i]));
			if(vis.find(nw)==vis.end() && rem.find(nw)==rem.end()){
				vis.insert(nw);
				st.push_back(nw);
				if(nw==tg || vis.size()>3*k)
					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++){
		if(xx[i]=='1')
			x+=pw[i];
		if(yy[i]=='1')
			y+=pw[i];
	}
	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...