# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
71786 | tamtam | Cave (IOI13_cave) | C++14 | 803 ms | 640 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |