제출 #1168331

#제출 시각아이디문제언어결과실행 시간메모리
1168331ghammazhassanInspector (POI13_ins)C++20
0 / 100
4 ms9540 KiB
// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
using namespace std;
#define int long long
#define fi first
#define se second
const int N=3e5+5;
const int M=1e9+7;
const int LOG = 20;
int n , m , k , c , d , t=1 , q=1 , x , y , p[N] , l , r;
vector<vector<int>>a(N);

int bp(int x,int y){
	x=x%M;
	if (y==0)return 1;
	if (y==1)return x;
	int r=bp(x*x,y/2);
	if (y%2)r*=x;
	r%=M;
	return r;
}
int inv(int x){
	return bp(x,M-2);
}

void solve()
{	
	cin >> n >> k;
	string s,t;
	cin >> s >> t;
	x=0,y=0;
	for (int i=0;i<n;i++){
		x+=(1<<(n-i-1))*(int)(s[i]-'0');
	}
	for (int i=0;i<n;i++){
		y+=(1<<(n-i-1))*(int)(t[i]-'0');
	}
	vector<int>o(1<<n);
	for (int e=0;e<k;e++){
		c=0;
		string f;
		cin >> f;
		for (int i=0;i<n;i++){
			c+=(1<<(n-i-1))*(f[i]-'0');
		}
		o[c]=1;
	}
	for (int i=0;i<(1<<n);i++){
		if (o[i])continue;
		string u;
		for (int j=n-1;j>=0;j--){
			u+=('0'+(((1<<j)|i)==i));
		}
		for (int j=0;j<n;j++){
			u[j]='0'+((u[j]-'0')^1);
			c=0;
			for (int i=0;i<n;i++){
				c+=(1<<(n-i-1))*(u[i]-'0');
			}
			u[j]='0'+((u[j]-'0')^1);
			if (o[c])continue;
			a[c].push_back(i);

		}
	}
	queue<int>oi;
	vector<int>vi(1<<n),di(1<<n);
	oi.push(x);
	vi[x]=1;
	while (!oi.empty()){
		int h=oi.front();
		oi.pop();
		for (int i:a[h]){
			if (vi[i])continue;
			vi[i]=1;
			di[i]=di[h]+1;
			oi.push(i);
		}
	}
	if (di[y]){
		cout << "TAK" << endl;
	}
	else{
		cout << "NIE" << endl;
	}
}
signed main()	
{

    ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
    cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE
    cout << fixed<<setprecision(9);
    // int t=1;
    // cin >> t;
    for (int _=1;_<=t;_++){
    	solve();
    	q++;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...