Submission #1143344

#TimeUsernameProblemLanguageResultExecution timeMemory
1143344adimiclaus15Walk (POI13_spa)C++20
24 / 100
373 ms11316 KiB
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 4194310;
bool f[NMAX+5],ajuns[NMAX+5];
queue<int>q;int n,nr2=0;
void BFS(){
    while(!q.empty()){
        int nr=q.front();q.pop();
        for(int i=0;i<n;i++){
            int nrr=nr;
            if((nr&(1<<i))!=0){nrr-=(1<<i);}
            else{nrr+=(1<<i);}
            if(nrr==nr2){ajuns[nr2]=1;return;}
            if(f[nrr]==0&&ajuns[nrr]==0){
                q.push(nrr);ajuns[nrr]=1;
            }
        }
        if(ajuns[nr2]==1){return;}
    }
}
int main()
{
    int k;cin>>n>>k;string a,b,s;cin>>a>>b;
    int nr1=0;
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    for(int i=0;i<a.size();i++){
        if(a[i]=='1'){nr1=nr1+(1<<i);}
    }
    for(int i=0;i<b.size();i++){
        if(b[i]=='1'){nr2=nr2+(1<<i);}
    }
    for(int i=1;i<=k;i++){
        cin>>s;int nr=0;
        reverse(s.begin(),s.end());
        for(int j=0;j<s.size();j++){
            if(s[j]=='1'){nr=nr+(1<<j);}
        }
        f[nr]=1;
    }
    q.push(nr1);ajuns[nr1]=1;
    if(nr1==nr2){
        cout<<"TAK"<<'\n';return 0;
    }
    BFS();
    if(ajuns[nr2]==0){
        cout<<"NIE"<<'\n';
    }
    else{
        cout<<"TAK"<<'\n';
    }
    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...