제출 #1363298

#제출 시각아이디문제언어결과실행 시간메모리
1363298biserailievaDark Ride (EGOI25_darkride)C++20
0 / 100
0 ms436 KiB
#include <bits/stdc++.h>
using namespace std;

int n;

int ask(const vector<int>& ones) {
    string s(n, '0');
    for (int x : ones) s[x] = '1';
    cout << "? " << s << endl;
    int l; cin >> l;
    return l;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;

    vector<int> all(n);
    iota(all.begin(), all.end(), 0);

    vector<vector<int>> queries;
    vector<int> parity;

    vector<int> cur = all;

    while ((int)cur.size() > 1) {
        int mid = cur.size() / 2;
        vector<int> left(cur.begin(), cur.begin() + mid);

        int x = ask(left);

        queries.push_back(left);
        parity.push_back(x % 2);

        cur = left;
    }

    int A = cur[0];

    vector<bool> possible(n, true);
    possible[A] = false;

    for (int i = 0; i < (int)queries.size(); i++) {
        auto &S = queries[i];
        vector<bool> inS(n, false);
        for (int x : S) inS[x] = true;

        for (int j = 0; j < n; j++) {
            if (j == A) continue;

            if (parity[i] == 1) {
                if (inS[A] == inS[j]) possible[j] = false;
            } else {
                if (inS[A] != inS[j]) possible[j] = false;
            }
        }
    }

    int B = -1;
    for (int i = 0; i < n; i++) {
        if (possible[i]) {
            B = i;
            break;
        }
    }

    cout << "! " << A << " " << B << endl;
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…