제출 #1330863

#제출 시각아이디문제언어결과실행 시간메모리
1330863miminyteWorm Worries (BOI18_worm)C++20
10 / 100
2 ms4168 KiB
#include <iostream>
#include <vector>
#include <map>

using namespace std;

vector <int> v;
int q;
int l, r, mid;

int ask(int i) {
    if(q == 0) {
        cout << r-mid << ' ' << mid-l << endl;
        exit(0);
    }
    q--;

    cout << "? " << i+1 << " 1 1" << endl;
    cin >> v[i];
    return v[i];
}

int main() {
    int n, m, k;

    cin >> n >> m >> k >> q;

    v.resize(n, -1);

    l = 0;
    r = n - 1;

    int a, b;
    a = int(0.382 * n);
    b = int(0.618 * n);
    if(a == b) {
        b++;
    }

    ask(a);
    ask(b);

    if(v[a] < v[b]) {
        l = a;
        mid = b;
    } else {
        r = b;
        mid = a;
    }

    int curr;

    while(r - mid > 1 || mid - l > 1) {
        if(r - mid > mid - l) {
            curr = (mid + r) / 2;
            ask(curr);
            if(v[curr] < v[mid]) {
                r = curr;
            } else {
                l = mid;
                mid = curr;
            }
        }
        else {
            curr = (mid + l) / 2;
            ask(curr);
            if(v[curr] < v[mid]) {
                l = curr;
            } else {
                r = mid;
                mid = curr;
            }
        }
    }

    if(mid > 0 && v[mid-1] == -1) {
        ask(mid-1);
    }

    if(mid < n-1 && v[mid+1] == -1) {
        ask(mid+1);
    }

    if(v[mid] >= v[mid-1] && v[mid] >= v[mid+1]) {
        cout << "! " << mid + 1 << " 1 1" << endl;
    } else if(v[mid-1] >= v[mid]) {
        cout << "! " << mid - 1 + 1 << " 1 1" << endl;
    } else {
        cout << "! " << mid + 1 + 1 << " 1 1" << endl;
    }

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