제출 #1357300

#제출 시각아이디문제언어결과실행 시간메모리
1357300mahribanDark Ride (EGOI25_darkride)C++20
40 / 100
0 ms480 KiB
#include<bits/stdc++.h>
using namespace std;
int main(){
    int N;
    cin >> N;
    if (N <= 30){
        string s(N, '0');
        int i = 0, x = -1, y = -1, k;
        while (i < N){
            s[i] = '1';
            cout << "? " << s << endl;
            cin >> k;
            if (k == 1){if (x < 0)x = i; else y = i;}
            s[i] = '0';
            i ++;
        }
        cout << "! " << x << ' ' << y << endl;
        return 0;
    }
    string s(N, '0');
    int k;
    if (N % 2 == 0){
        s.replace(N / 2, N / 2, string(N / 2, '1'));
        cout << "? " << s << endl;
        cin >> k;
        if (k % 2 == 0){
            int l = 1, r = N, k;
            s.replace(0, N, string(N, '0'));
            while (l <= r){
                int mid = (l + r) / 2 - 1;
                s.replace(l, mid - l + 1, string(mid - l + 1, '1'));
                cout << "? " << s << endl;
                cin >> k;
                s.replace(l, mid - l + 1, string(mid - l + 1, '0'));
                if (k % 2 == 0){l = mid + 1;}
                else{r = mid - 1;}
            }
            cout << "! " << 0 << ' ' << l << endl; 
        }
    }
    int x, y, l = N / 2, r = N;
    s.replace(0, N, string(N, '0'));
    while (l <= r){
        int mid = (l + r) / 2;
        s.replace(l, mid - l + 1, string(mid - l + 1, '1'));
        cout << "? " << s << endl;
        cin >> k;
        s.replace(l, mid - l + 1, string(mid - l + 1, '0'));
        if (k % 2 == 0){l = mid + 1;}
        else{r = mid - 1;}
    }
    x = l;
    s.replace(0, N, string(N, '0'));
    l = 0, r = N / 2 - 1;
    while (l <= r){
        int mid = (l + r) / 2;
        s.replace(l, mid - l + 1, string(mid - l + 1, '1'));
        cout << "? " << s << endl;
        cin >> k;
        s.replace(l, mid - l + 1, string(mid - l + 1, '0'));
        if (k % 2 == 0){l = mid + 1;}
        else{r = mid - 1;}
    }
    y = l;
    
    cout << "! " << y << ' ' << x << endl;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…