Submission #1193324

#TimeUsernameProblemLanguageResultExecution timeMemory
1193324salmonThe Big Prize (IOI17_prize)C++20
0 / 100
0 ms404 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; int N; set<int,greater<int>> sat; int solve(int s, int e, int lv, int rv, int tot){ if(s > e) return -1; if(lv + rv == tot) return -1; int m = (s + e)/2; vector<int> temp = ask(m); int sum = temp[0] + temp[1]; if(sum == 0) return m; if(tot < sum){ tot = sum; int store = solve(0,m - 1, 0, temp[1],tot); if(store != -1) return store; return solve(m + 1, N - 1, temp[0], 0,tot); } else{ for(int i = m + 1; i <= e; i++){ vector<int> temp = ask(i); int sum = temp[0] + temp[1]; if(sum == 0) return i; if(sum == tot){ int store = solve(s,m - 1, lv, temp[1] + i - m,tot); if(store != -1) return store; return solve(i + 1, e, temp[0], lv,tot); } else if(tot < sum){ tot = sum; int store = solve(0,m - 1, 0, temp[1],tot); if(store != -1) return store; return solve(m + 1, N - 1, temp[0], 0,tot); } } for(int i = m - 1; i >= s; i--){ vector<int> temp = ask(m); int sum = temp[0] + temp[1]; if(sum == 0) return i; if(sum == tot){ return solve(s, i - 1, lv, temp[1],tot); } else if(tot < sum){ tot = sum; int store = solve(0,m - 1, 0, temp[1],tot); if(store != -1) return store; return solve(m + 1, N - 1, temp[0], 0,tot); } } return -1; } } int find_best(int N) { ::N = N; int s = 0; int e = N - 1; return solve(s,e,0,0,-1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...