제출 #1143194

#제출 시각아이디문제언어결과실행 시간메모리
1143194alexnicu새로운 문제 (POI13_spa)C++17
12 / 100
686 ms7464 KiB
#include <iostream>
#include <string>
#include <vector>
#include <queue>

using namespace std;

bool existing_numbers[(1<<24) + 5];

int string_to_number( string s ) {
    int ans = 0, pow = 0;
    for ( int i = s.size() - 1; i >= 0; i-- ) {
        if ( s[i] == '1' ) {
            ans = ans + ( 1 << pow );
        }
        pow++;
    }
    return ans;
}

vector<int> search_neighbors(int x, int n) {
    vector<int> ans;
    int cx = x;
    for ( int i = n - 1; i >= 0; i-- ) {
       if ( x >= (1 << i) ){
        ans.push_back(cx - (1 << i));
        x -= (1 << i);
       }
       else
        ans.push_back(cx + (1 << i));
    }
    return ans;
}

int main() {
    int n, k;
    cin >> n >> k;
    string a, b;
    cin >> a >> b;
    int start, finish;
    start = string_to_number(a);
    finish = string_to_number(b);
    string s;
    for ( int i = 1; i <= k; i++ ) {
        cin >> s;
        existing_numbers[string_to_number(s)] = true;
    }
    if ( a == b )
    {
        cout << "TAK";
        return 0;
    }
    try{
        queue<int> q;
        q.push(start);
        existing_numbers[start] = true;
        while(!q.empty() && existing_numbers[finish] == false) {
            int elem = q.front();
            vector<int> ans = search_neighbors(elem, n);
            for (auto nr : ans) {
                if ( existing_numbers[nr] == false ) {
                   existing_numbers[nr] = true;
                   q.push(nr);
                }
            }
            q.pop();
        }
    }
    catch(const exception& e){
        cout << "TAK";
        return 0;
    }
    if ( existing_numbers[finish] == true )
        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...