제출 #995427

#제출 시각아이디문제언어결과실행 시간메모리
995427saddd동굴 (IOI13_cave)C++17
100 / 100
431 ms852 KiB
#include "cave.h" #include<bits/stdc++.h> using namespace std; int n; void exploreCave(int N) { n = N; int ask[n] = {}, anss[n] = {}, ansd[n] = {}, ress[n] = {}, resd[n] = {}; bool seen[n]; for(int i = 0; i < n; i++)seen[i] = 0; for(int i = 0; i < n; i++){ // door to switch for(int j = 0; j < i; j++){ ask[ansd[j]] = anss[j]; } for(int j = 0; j < n; j++){ if(!seen[j])ask[j] = 0; } int v = tryCombination(ask); //for(int j = 0; j < n; j++)cout << ask[j] << " "; //cout << v << "\n"; if(v == -1 || v > i){ anss[i] = 0; }else{ anss[i] = 1; } int l = 0, r = n - 1; while(l <= r){ int mid = (l + r) >> 1; for(int j = 0; j < mid; j++){ if(!seen[j])ask[j] = !anss[i]; } for(int j = mid; j < n; j++){ if(!seen[j])ask[j] = anss[i]; } int v = tryCombination(ask); if(v == -1 || v > i){ ansd[i] = mid; l = mid + 1; }else{ r = mid - 1; } } seen[ansd[i]] = 1; } //switch to door for(int i = 0; i < n; i++){ ress[ansd[i]] = anss[i]; resd[ansd[i]] = i; } answer(ress, resd); }
#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...