Submission #1303597

#TimeUsernameProblemLanguageResultExecution timeMemory
1303597activedeltorreCave (IOI13_cave)C++20
100 / 100
284 ms696 KiB
#include "cave.h"
#include<iostream>
#include <vector>
using namespace std;
int n;
int query(vector<pair<int,int> >stiut,vector<int>nestiut,int prefix1)
{
    int rasp[5005];
    for(int i=0; i<n; i++)
    {
        rasp[i]=0;
    }
    for(int i=0; i<prefix1; i++)
    {
        rasp[nestiut[i]]=1;
    }
    for(auto k:stiut)
    {
        rasp[k.first]=k.second;
    }
    int last=tryCombination(rasp);
    if(last==-1)
    {
        return n;
    }
    return last;
}
void exploreCave(int N)
{
    vector<pair<int,int>>stiut;
    vector<int>nestiut;
    n=N;
    for(int i=0; i<n; i++)
    {
        nestiut.push_back(i);
    }
    int tip[5005],rasp[5005];
    for(int i=1; i<=n; i++)
    {
        int rez=query(stiut,nestiut,nestiut.size());
        if(rez>=i)
        {
            int st=0,dr=nestiut.size(),sol=0;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                rez=query(stiut,nestiut,mij);
                if(rez>=i)
                {
                    dr=mij-1;
                    sol=mij-1;
                }
                else
                {
                    st=mij+1;
                }
            }
            sol=nestiut[sol];
            rasp[sol]=i-1;
            tip[sol]=1;
            //cout<<"usa "<<i-1<<" descisa de switchul "<<sol<<" pe 1"<<'\n';
            stiut.push_back({sol,1});
            vector<int>ne2;
            for(auto k:nestiut)
            {
                if(k!=sol)
                {
                    ne2.push_back(k);
                }
            }
            swap(ne2,nestiut);
        }
        else
        {
            int st=0,dr=nestiut.size(),sol=0;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                rez=query(stiut,nestiut,mij);
                if(rez>=i)
                {
                    st=mij+1;
                }
                else
                {
                    dr=mij-1;
                    sol=mij-1;
                }
            }
            sol=nestiut[sol];
            tip[sol]=0;
            rasp[sol]=i-1;
            //cout<<"usa "<<i-1<<" descisa de switchul "<<sol<<" pe 0"<<'\n';
            stiut.push_back({sol,0});
            vector<int>ne2;
            for(auto k:nestiut)
            {
                if(k!=sol)
                {
                    ne2.push_back(k);
                }
            }
            swap(ne2,nestiut);
        }
    }
    answer(tip,rasp);

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