Submission #71786

#TimeUsernameProblemLanguageResultExecution timeMemory
71786tamtamCave (IOI13_cave)C++14
100 / 100
803 ms640 KiB
#include "cave.h"
#include<bits/stdc++.h>
#define F first
#define S second
typedef long long ll;
using namespace std;
int n;
bool done[5010];
int correctpos[5010];
int whichdoor[5010];
int ask[5010];
vector<int> cur;
pair<int,int> Solve(int door){
    cur.clear();
    int correct;
    for (int i=0;i<n;i++){
        if (!done[i]){cur.push_back(i);ask[i]=0;}
        else ask[i]=correctpos[i];
    }
    int x=tryCombination(ask);
    if (x==-1||x>door){
        correct=0;
    }else {
        correct=1;
    }
    int st=0,en=cur.size()-1;
    int mid;
    int ans=cur.size()-1;
    while (st<=en){
        mid=(st+en)/2;
        for (int i=0;i<cur.size();i++){
            if (i<=mid){
                ask[cur[i]]=correct;
            }else {
                ask[cur[i]]=1-correct;
            }
        }
        x=tryCombination(ask);
        if (x==-1||x>door){
            ans=mid;
            en=mid-1;
        }else {
            st=mid+1;
        }
    }
    return {cur[ans],correct};
}

void exploreCave(int N) {
    n=N;
    for (int i=0;i<n;i++){
        pair<int,int> x=Solve(i);
        whichdoor[x.F]=i;
        done[x.F]=true;
        correctpos[x.F]=x.S;
    }

    //for (int i=0;i<n;i++){
      //  cout <<whichdoor[i]<<" ";
    //}
    //cout <<endl;

    answer(correctpos,whichdoor);
}

Compilation message (stderr)

cave.cpp: In function 'std::pair<int, int> Solve(int)':
cave.cpp:31:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i=0;i<cur.size();i++){
                      ~^~~~~~~~~~~
#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...