제출 #444648

#제출 시각아이디문제언어결과실행 시간메모리
444648Hanksburger동굴 (IOI13_cave)C++14
100 / 100
1080 ms716 KiB
#ifdef __cplusplus extern "C" { #endif int tryCombination(int S[]); void answer(int S[], int D[]); void exploreCave(int N); #ifdef __cplusplus } #endif #include <bits/stdc++.h> using namespace std; int ansS[5000], ansD[5000], guess[5000], NN; void recur(int index, int L, int R, int x) { if (L==R) { int cnt=0; for (int i=0; i<NN; i++) { if (ansS[i]==-1) { if (cnt==L) { ansS[i]=guess[i]=x; ansD[i]=index; return; } cnt++; } } // cout << "-------------------------------------------\n"; } // cout << "recur " << index << ' ' << L << ' ' << R << ' ' << x << '\n'; int mid=(L+R)/2, cnt=0; for (int i=0; i<NN; i++) { // cout << "here\n"; if (ansS[i]==-1) { if (L<=cnt && cnt<=mid) guess[i]=x; else guess[i]=1-x; cnt++; // cout << "guess " << i << " = " << guess[i] << '\n'; } } if (tryCombination(guess)==index) recur(index, mid+1, R, x); else recur(index, L, mid, x); } void exploreCave(int N) { NN=N; for (int i=0; i<N; i++) ansS[i]=-1; for (int i=0; i<N; i++) { for (int j=0; j<N; j++) if (ansS[j]==-1) guess[j]=0; recur(i, 0, N-i-1, (tryCombination(guess)==i)); } answer(ansS, ansD); }
#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...