제출 #1248082

#제출 시각아이디문제언어결과실행 시간메모리
1248082denislav동굴 (IOI13_cave)C++20
100 / 100
163 ms516 KiB
# include <iostream>
# include <vector>
using namespace std;
# include "cave.h"
//# include "grader.c"

const int MAX=5e3+11;

/*
int n;
int _S[MAX];
int _D[MAX];
int _pos[MAX];

void read()
{
    cin>>n;
    for(int i=0;i<n;i++) cin>>_S[i];
    for(int i=0;i<n;i++)
    {
        cin>>_D[i];
        _pos[_D[i]]=i;
    }
}

int tryCombination(int s[])
{
    for(int i=0;i<n;i++)
    {
        int id=_pos[i];
        if(s[id]!=_S[id]) return i;
    }
    return -1;
}

void answer(int s[], int d[])
{
    bool f=1;
    for(int i=0;i<n;i++)
    {
        if(s[i]!=_S[i]) f=0;
        if(d[i]!=_D[i]) f=0;
    }

    for(int i=0;i<n;i++) cout<<s[i]<<" ";
    cout<<endl;
    for(int i=0;i<n;i++) cout<<d[i]<<" ";
    cout<<endl;

    if(f) cout<<"Correct"<<endl;
    else cout<<"Incorrect"<<endl;
}
*/

///----------------------------------

int s[MAX];
int d[MAX];

int query(int S[])
{
    int resp=tryCombination(S);
    if(resp==-1) return 1e9;
    else return resp;

}

void exploreCave(int N)
{
    for(int i=0;i<N;i++)
    {
        s[i]=0;
        d[i]=-1;
    }

    for(int i=0;i<N;i++)
    {
        int resp=query(s);
        int l=0,r=N-1,ans=0;
        while(l<r)
        {
            int mid=(l+r)/2;
            for(int j=l;j<=mid;j++) if(d[j]==-1) s[j]=1;
            int resp2=query(s),L=l;

            //cout<<resp<<"::"<<resp2<<endl;

            if((resp==i and resp2==i) or (resp>i and resp2>i))
            {
                l=mid+1;
                ans=mid+1;
            }
            else
            {
                r=mid;
                ans=mid;
            }

            for(int j=L;j<=mid;j++) if(d[j]==-1) s[j]=0;
        }

        //cout<<i<<"->"<<ans<<endl;
        d[ans]=i;
        if(resp==i) s[ans]=1;
    }

    answer(s,d);
}

/*
int main()
{
    read();
    exploreCave(n);

    return 0;
}
*/

/*
4
1 1 1 0
3 1 0 2
*/
#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...