제출 #1297485

#제출 시각아이디문제언어결과실행 시간메모리
1297485Jawad_Akbar_JJ커다란 상품 (IOI17_prize)C++20
20 / 100
27 ms2028 KiB
#include <iostream> #include <vector> #include "prize.h" using namespace std; int tot, Ans = 0; vector<int> res; vector<int> Ask(int id){ res = ask(id); if (res[0] + res[1] == 0) Ans = id; return res; } void Solve(int l, int r, int k, int cnt){ vector<int> rs; if (cnt == 0 or l == r) return; int mid = (l + r) / 2; rs = Ask(mid); if (rs[0] + rs[1] != tot){ int m1 = mid + 1; while (m1 < r){ rs = Ask(m1); if (rs[0] + rs[1] == tot) break; m1++; } if (m1 == r) Solve(l, mid, k, cnt - (m1 - mid)); else Solve(l, mid, k, k - rs[1] - (m1 - mid)); Solve(m1, r, rs[1], cnt - (k - rs[1])); return; } Solve(l, mid, k, k - rs[1]); Solve(mid, r, rs[1], cnt - (k - rs[1])); } int find_best(int n){ srand(time(0)); if (n <= 150){ for (int i=0;i<n;i++){ Ask(i); tot = max(tot, res[0] + res[1]); } } else{ for (int i=1;i<=20;i++){ int id = rand() % n; Ask(id); tot = max(tot, res[0] + res[1]); } for (int i=1;i * 20 <= n and i < 180;i++){ int id = i * 20 - rand() % 20 - 1; Ask(id); tot = max(tot, res[0] + res[1]); } } Solve(0, n, tot, tot); return Ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...