제출 #724235

#제출 시각아이디문제언어결과실행 시간메모리
724235Bobonbush동굴 (IOI13_cave)C++17
13 / 100
2074 ms476 KiB
#include<cave.h> #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MODULO = 1e9+7; const ll INF = 1e18+1; template<class X ,class Y> bool Minimize(X &x , Y y) { if(x > y) { x = y ; return true; } return false; } template<class X ,class Y> bool Maximize(X &x , Y y ) { if(x < y) { x = y; return true; } return false; } template<class X ,class Y> void Add(X &x , Y y) { x += y; if( x >= MODULO) x -= MODULO; } template<class X ,class Y> void Sub(X &x , Y y ) { x -= y ; if( x < 0 ) x += MODULO; } void exploreCave(int n) { int status[n] ; int related[n]; for(int i = 0 ; i < n ; i++) { related[i] = 0; status[i] = 0; } vector<int>List; for(int i = 0 ; i < n ; i++)List.push_back(i); for(int i = 0 ; i < n ; i++) { int cur = tryCombination(status); int l = 0; int r = (int)List.size()-1; int best = -1; int trangthai = -1; while(l <= r) { int mid = (l+r) >> 1; for(int i = 0 ; i <= mid ; i++) { status[List[i]] = 1; } int x = tryCombination(status); for(int i = 0 ; i <= mid ;i++)status[List[i]] = 0; if(cur != -1 && x == -1 ) { r = mid-1; continue; } if(cur != -1) { best = mid; trangthai = x; l = mid+1; continue; } if( cur == -1&& x != cur) { trangthai = x; best = mid; r = mid-1; continue; } l = mid+1; } if(best == -1) { while(true) { continue; } } int t = List[best]; swap(List[best] , List.back()); List.pop_back(); if(cur == -1) { status[t] = 0; related[t] = trangthai; }else { status[t] = 1; related[t] = cur; } } answer(status , related); }
#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...