Submission #1274716

#TimeUsernameProblemLanguageResultExecution timeMemory
1274716nickkumaMađioničar (COI22_madionicar)C++20
0 / 100
496 ms408 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define int long long

int n;

bool ask(int i, int sz){
    int resp;
    cout << "? " << i << ' ' << i+sz-1 << '\n' << flush;
    cin >> resp;

    return resp==1;
}

void sol(){
    cin >> n;

    //even sized palindromes
    int ans=1;
    bool found=0;
    int sz=2;
    do{
        found=0;
        for(int i=1;i<=n-sz+1;i++){
            if(ask(i,sz)){
                found=1;
                ans=max(ans,sz);
                
                while(1<=i-1 && sz+2<=n && i+sz<=n){ //expand palin
                    i--; sz+=2;
                    if(ask(i,sz))ans=max(ans,sz);
                    else break;
                }
            }
        }
    }while(found && sz<=n);

    //odd sized palindromes
    sz=3;
    do{
        found=0;
        for(int i=1;i<=n-sz+1;i++){
            if(ask(i,sz)){
                found=1;
                ans=max(ans,sz);
                
                while(1<=i-1 && sz+2<=n && i+sz<=n){ //expand palin
                    i--; sz+=2;
                    if(ask(i,sz)) ans=max(ans,sz);
                    else break;
                }
            }
        }
    }while(found && sz<=n);

    cout << "! " << ans << '\n' << flush;
    return;
}

signed main(){
    int tc=1; 
    // cin >> tc;
    while(tc--) sol();
    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...