Submission #526592

#TimeUsernameProblemLanguageResultExecution timeMemory
526592hibikiCave (IOI13_cave)C++11
0 / 100
375 ms424 KiB
#include "cave.h" #include<bits/stdc++.h> using namespace std; int ask[5050]; // idx=switch int open[5050]; // idx=door int link[5050]; // idx=door int alr[5050]; // idx=switch int ans[5050]; void exploreCave(int N) { int n=N; memset(alr,0,sizeof(alr)); memset(link,-1,sizeof(link)); memset(open,-1,sizeof(open)); for(int i=0;i<n;i++) { // printf("%d: ",i); memset(ask,0,sizeof(ask)); // set to open all of previous door for(int j=0;j<i;j++) { ask[link[j]]=open[j]; } // for(int i=0;i<n;i++) // { // printf("%d ",ask[i]); // } int ret=tryCombination(ask); if(ret==i) open[i]=1; else open[i]=0; //printf(":: %d\n",open[i]); int l=0,r=n-1-i; while(l<=r) { int cnt=0; if(l==r) { for(int j=0;j<n;j++) { if(alr[j])continue; if(cnt==l) { link[i]=j; alr[j]=1; break; } cnt++; } break; } int mid=(l+r)/2; for(int j=0;j<n;j++) { if(alr[j])continue; if(j>=l&&j<=mid)ask[j]=open[i]; else ask[j]=(open[i]+1)%2; cnt++; } ret=tryCombination(ask); if(ret==i) { l=mid+1; } else { r=mid; } } } for(int i=0;i<n;i++) { ans[link[i]]=i; ask[link[i]]=open[i]; } // int ok; // for(int i=0;i<n;i++) // { // printf("%d %d\n",ask[i],ans[i]); // } // scanf("%d\n",&ok); answer(ask,ans); }
#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...