Submission #1143380

#TimeUsernameProblemLanguageResultExecution timeMemory
1143380wizard_49Walk (POI13_spa)C++20
12 / 100
5097 ms263068 KiB
#include <iostream>
#include <fstream>
#include <queue>
#include <cmath>
#include <string>
using namespace std;

vector<int> vis;

int convert(int n,string s){
    int x=0;
    for(int i=0;i<n;i++){
        x+=(s[i]-'0')*((int)1<<(n-i-1));
    }
    return x;
}

queue<int> q;


int main(){
    int n,k,x=0,y=0;
    string s;
    
    cin>>n>>k>>s;
    x=convert(n,s);
    cin>>s;
    y=convert(n,s);

    vis.resize((int)pow(2,n),0);
    for(int i=0;i<k;i++){
        cin>>s;
        vis[convert(n,s)]=-1;
    }


    q.push(x);
    vis[x]=1;
    while(!q.empty()){
        if(vis[y]==1){
            break;
        }
        int p=q.front();
        q.pop();
        for(int i=0;i<n;i++){
            int p1;
            if(p&(1<<(i))){
                p1=p-(1<<(i));
            }
            else{
                p1=p+(1<<(i));
            }
            if(vis[p1]==0){
                vis[p1]=1;
                q.push(p1);
            }
        }
    }

    if(vis[y]==1){
        cout<<"TAK";
    }
    else{
        cout<<"NIE";
    }

    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...