Submission #1143372

#TimeUsernameProblemLanguageResultExecution timeMemory
1143372snpmrnhlolWalk (POI13_spa)C++20
12 / 100
5106 ms324720 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int K = 1e6;
int calc(string &x){
    int nr = 0;
    for(int i = 0;i < x.size();i++){
        nr = nr*2 + x[i] - '0';
    }
    return nr;
}
set <int> vis;
int st, en;
int n, k;
bool dfs(int x){
    if(vis.find(x) != vis.end())return 0;
    vis.insert(x);
    if(x == en)return 1;
    bool ok = 0;
    for(int i = n/2;i < n;i++){
        if((x^en)>>i&1){
            ok|=dfs(x^(1ll<<i));
            if(ok)break;
        }
    }
    if(ok)return 1;
    for(int i = n/2 - 1;i >= 0;i--){
        if((x^en)>>i&1){
            ok|=dfs(x^(1ll<<i));
            if(ok)break;
        }
    }
    if(ok)return 1;
    for(int i = 0;i < n;i++){
        if(!((x^en)>>i&1)){
            ok|=dfs(x^(1ll<<i));
            if(ok)break;
        }
    }
    return ok;
}
int32_t main(){
    cin>>n>>k;
    string a, b;
    cin>>a>>b;
    st = calc(a);
    en = calc(b);
    for(int i = 0;i < k;i++){
        cin>>a;
        vis.insert(calc(a));
    }
    if(dfs(st)){
        cout<<"TAK\n";
    }else{
        cout<<"NIE\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...