제출 #720382

#제출 시각아이디문제언어결과실행 시간메모리
720382n0sk1llColors (BOI20_colors)C++14
9 / 100
1 ms332 KiB
#include <bits/stdc++.h>

#define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cerr.tie(0)
#define mp make_pair
#define xx first
#define yy second
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define all(x) x.begin(),x.end()
#define ff(i,a,b) for (int i = a; i < b; i++)
#define fff(i,a,b) for (int i = a; i <= b; i++)
#define bff(i,a,b) for (int i = b-1; i >= a; i--)
#define bfff(i,a,b) for (int i = b; i >= a; i--)

using namespace std;
long double typedef ld;
unsigned int typedef ui;
long long int typedef li;
pair<int,int> typedef pii;
pair<li,li> typedef pli;
pair<ld,ld> typedef pld;
vector<vector<int>> typedef graph;
unsigned long long int typedef ull;
//const int mod = 998244353;
const int mod = 1000000007;







//Note to self: Check for overflow

bool ask(li x) //da li njen decko noticuje promenu
{
    cout<<"? "<<x<<endl;
    bool verd; cin>>verd; return verd;
}

li solvebs(li n)
{
    li l=0,r=n;
    li p=(n+2)/3,k; ask(p);
    bool idedesno=true;

    while (r-l>3) //koliko mu je dozvoljeno da skace
    {
        if (idedesno) k=(l+r+1)/2;
        else k=(l+r)/2;

        li q;
        if (idedesno) q=p+k;
        else q=p-k;
        if (ask(q)) r=k;
        else l=k;
        idedesno=!idedesno;
        p=q;
    }

    //cout<<"izaso iz binarne: "<<l<<" "<<r<<": "<<k<<endl;

    if (l==k)
    {
        while(true)
        {
            k++;
            if (k>n-1) return n;
            li q;
            if (idedesno) q=p+k;
            else q=p-k;
            if (ask(q)) return k;
            idedesno=!idedesno;
            p=q;
        }
    }
    else
    {
        while (true)
        {
            k--;
            if (k==0) return 1;
            li q;
            if (idedesno) q=p+k;
            else q=p-k;
            if (!ask(q)) return k+1;
            idedesno=!idedesno;
            p=q;
        }
    }
}

int main()
{
    FAST;

    li n; cin>>n;


    if (n<=64)
    {
        int l=1,r=n;
        ask(l++);
        while (r-l>=0)
        {
            if (!ask(r)) return cout<<"= "<<r-l+2,0;
            r--;

            if (r-l>=0)
            {
                if (!ask(l)) return cout<<"= "<<r-l+2,0;
                l++;
            }
        }
        cout<<"= 1";
    }
    else
    {
        li ans=solvebs(n);
        cout<<"= "<<ans<<"\n";
    }
}

//Note to self: Check for overflow

컴파일 시 표준 에러 (stderr) 메시지

Colors.cpp: In function 'li solvebs(li)':
Colors.cpp:83:14: warning: 'k' may be used uninitialized in this function [-Wmaybe-uninitialized]
   83 |             k--;
      |             ~^~
#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...