제출 #1168079

#제출 시각아이디문제언어결과실행 시간메모리
1168079Faisal_SaqibWalk (POI13_spa)C++17
25 / 100
5048 ms191736 KiB
#include <bitset> #include <iostream> #include <map> #include <queue> using namespace std; #define ll long long int n,k; char c; ll asp=0; // 10000000040 bitset<1000000000> ban[2]; ll read() { asp=0; for(int i=0;i<n;i++) { cin>>c; asp<<=1; asp+=c-'0'; } return asp; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>k; ll st=read(),ed=read(); for(int i=0;i<k;i++) { ll c=read(); ban[0][c]=ban[1][c]=1; } // lets do a double sided bfs // better time complexity queue<pair<ll,char>>pq; ban[0][st]=1; pq.push({st,'0'}); ban[1][ed]=1; pq.push({ed,'1'}); ll op=0; while(pq.size()) { auto xa=pq.front(); pq.pop(); op++; ll x=xa.first; if(ban[0][x]&ban[1][x]) { cout<<"TAK"<<endl; return 0; } int vis=(xa.second-'0'); // if(op*n >= 2e9) // { // break; // } ll pw=1; for(int bi=0;bi<n;bi++) { ll y=x^pw; if(!ban[vis][y]) { if(ban[1-vis][y]) { cout<<"TAK"<<endl; return 0; } ban[vis][y]=1; pq.push({y,'0'+vis}); } pw<<=1; } } 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...