제출 #1082623

#제출 시각아이디문제언어결과실행 시간메모리
1082623KALARRY동굴 (IOI13_cave)C++14
51 / 100
1385 ms620 KiB
//chockolateman #include<bits/stdc++.h> #include "cave.h" using namespace std; int n,pos[5005]; int query[5005]; int ask_Query(vector<int> S) { for(int i = 0 ; i < n ; i++) query[i] = S[i]; return tryCombination(query); } bool check(vector<int> combo,int door) { int res = ask_Query(combo); return (res > door || res == -1); } void exploreCave(int N) { n = N; vector<int> cur; for(int i = 0 ; i < N ; i++) { pos[i] = -1; cur.push_back(0); } for(int i = 0 ; i < N ; i++) { int res = ask_Query(cur); if(res > i || res==-1) for(int j = 0 ; j < N ; j++) if(pos[j]==-1) cur[j] = (cur[j] + 1)%2; int cur_switch = -1; for(int b = N ; b >= 1 ; b/=2) { if(cur_switch + b > N) continue; vector<int> temp = cur; for(int j = 0 ; j <= cur_switch + b; j++) if(pos[j]==-1) temp[j] = (temp[j] + 1)%2; while(cur_switch + b < N && !check(temp,i)) { cur_switch += b; for(int j = 0 ; j <= cur_switch ; j++) if(pos[j]==-1) cur[j] = (cur[j] + 1)%2; for(int j = 0 ; j <= cur_switch + b; j++) if(pos[j]==-1) temp[j] = (temp[j] + 1)%2; } } cur_switch++; pos[cur_switch] = i; cur[cur_switch] = (cur[cur_switch] + 1)%2; } ask_Query(cur); answer(query,pos); }
#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...