제출 #1168404

#제출 시각아이디문제언어결과실행 시간메모리
1168404Jawad_Akbar_JJ새로운 문제 (POI13_spa)C++20
12 / 100
664 ms66772 KiB
#include <iostream>
#include <map>
#include <queue>
#include <algorithm>

using namespace std;
#define int long long
int  X, Y, o = 1, Sn[1<<23];
map<int, int> seen, seen1, seen2;
vector<int> vec;
int get(int n, int inp = 0){
	while (n--){
		char c;
		cin>>c;
		inp = inp * 2 + c - '0';
	}
	return inp;
}

void dfs(int n, int x, int num = 0){
	queue<int> Q;
	Q.push(x);
	seen[x] = 1;
	while (!Q.empty() and num < 100000){
		int cur = Q.front();
		Q.pop();
		for (int i=0;i<n;i++){
			cur ^= (o<<vec[i]);
			if (!seen2[cur] and !seen[cur])
				seen[cur] = 1, Q.push(cur), num++;
			cur ^= (o<<vec[i]);
		}
	}
}

void dfs2(int n, int x, int num = 0){
	queue<int> Q;
	Q.push(x);
	seen1[x] = 1;
	if (seen[x] == 1){
		cout<<"TAK\n";
		exit(0);
	}
	while (!Q.empty() and num < 100000){
		int cur = Q.front();
		Q.pop();
		for (int i=0;i<n;i++){
			cur ^= (o<<vec[i]);
			if (seen[cur]){
				cout<<"TAK\n";
				exit(0);
			}
			if (!seen2[cur] and !seen1[cur])
				seen1[cur] = 1, Q.push(cur), num++;
			cur ^= (o<<vec[i]);
		}
	}
}

void dfs111(int n, int x){
	if (x == Y){
		cout<<"TAK\n";
		exit(0);
	}
	if (Sn[x])
		return;
	Sn[x] = 1;
	for (int i=0;i<n;i++)
		dfs111(n, x ^ (1<<i));
}


signed main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int n, k;
	cin>>n>>k;

	X = get(n), Y = get(n);
	for (int i=1;i<=k;i++){
		int K = get(n);
		seen2[K] = 1, Sn[K] = 1;
	}

	for (int i=0;i<n;i++)
		vec.push_back(i);
	
	for (int i=1;i<100;i++)
		random_shuffle(begin(vec), end(vec));
	dfs(n, X);

	for (int i=1;i<100;i++)
		random_shuffle(begin(vec), end(vec));
	dfs2(n, Y);

	// dfs111(n, X);

	cout<<"NIE\n";
}
#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...