Submission #29929

#TimeUsernameProblemLanguageResultExecution timeMemory
29929inqrCave (IOI13_cave)C++14
100 / 100
1408 ms640 KiB
#include "cave.h" #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define rt insert #define st first #define nd second #define ll long long #define DB printf("debug\n"); using namespace std; int n; vector < pair<int,int> > sw_st(5000);//sw i 1 -> st kapi nd state vector < int > sw_nf; int last_try[5000]; int new_try[5000]; int last_try_ret; int new_try_ret; int last_try_state; int new_try_state; void try_dr(int dr){ if(dr==0){ memset(last_try,0,sizeof(last_try)); memset(new_try,0,sizeof(new_try)); } last_try_ret=tryCombination(last_try); last_try_state= (last_try_ret>dr || last_try_ret==-1) ? 0 : 1; //printf("1:dr = %d drst=%d ltr=%d\n",dr,last_try_state,last_try_ret); int l=0,r=sw_nf.size()-1,m; while(l<r){ for(int i=0;i<n;i++){ if(sw_st[i].nd==0){ new_try[i]=1; //printf("new_try[%d]=%d\n",i,new_try[i]); } else if(sw_st[i].nd==1){ new_try[i]=0; //printf("new_try[%d]=%d\n",i,new_try[i]); } } m=(l+r)/2; //printf(" dr =%d l=%d r=%d m=%d\n",dr,l,r,m); for(int i=l;i<=m;i++){ new_try[sw_nf[i]]=!last_try[sw_nf[i]]; //printf(" new_try[%d]=%d\n",sw_nf[i],new_try[sw_nf[i]]); } new_try_ret=tryCombination(new_try); new_try_state=(new_try_ret>dr || new_try_ret==-1) ? 0 : 1; if(last_try_state!=new_try_state){ r=m; } else{ l=m+1; } //printf(" dr=%d ret=%d kon eden l=%d r=%d\n",dr,new_try_ret,l,r); last_try_ret=new_try_ret; last_try_state=new_try_state; for(int i=0;i<n;i++){ last_try[i]=new_try[i]; } } int sw=sw_nf[l]; //printf("2:sw=%d ltr=%d lts=%d\n",sw,last_try_ret,last_try_state); if(dr==last_try_ret){ last_try[sw]=!last_try[sw]; } if(last_try[sw]==1){ sw_st[sw]=mp(dr,0); } else sw_st[sw]=mp(dr,1); //printf("3:sw=%d st=%d dr=%d st=%d\n",sw,1,dr,sw_st[sw].nd); sw_nf.erase(sw_nf.begin()+l); } void exploreCave(int N) { n=N; for(int i=0;i<n;i++){ sw_nf.pb(i);//bilinmeyenlere ekle sw_st[i]=mp(-1,-1); } for(int i=0;i<n;i++){ try_dr(i); } int ans1[n],ans2[n]; for(int i=0;i<n;i++){ if(sw_st[i].nd==0)ans1[i]=1; else ans1[i]=0; ans2[i]=sw_st[i].st; } answer(ans1,ans2); }
#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...