| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 821123 | vjudge1 | The Big Prize (IOI17_prize) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
int find_best(int n){
int mx = -1 , i , j , m , s , f , l , r , k , c , y , x;
map<int,int>mp[2];
vector<pair<int,int>> v;
for(i = 0; i < n; i++)
mp[0][i] = mp[1][i] = -1;
for(i = 0; i < min(n, 800); i++){
vector<int>gt = ask(i);
mp[0][i] = gt[0];
mp[1][i] = gt[1];
v.push_back({gt[0] + gt[1] , i});
if((gt[0] + gt[1]) == 0)
return i;
if((gt[0] + gt[1]) >= mx)
mx = gt[0] + gt[1] , x = gt[0] , k = i;
}
while(k < n){
l = k;
r = n - 1;
while(l != r){
m = (l + r + 1) / 2;
vector<int>gt;
if(mp[0][m] == -1)
gt = ask(m);
else
gt.pb(mp[0][m]) , gt.pb(mp[1][m]);
mp[0][m] = gt[0];
mp[1][m] = gt[1];
int sum = gt[0] + gt[1];
if(sum == 0)
return m;
if(sum == mx && (gt[0] == x)){
l = m;
}else {
r = m - 1;
}
}
k = l + 1;
while(k < n){
vector<int>gt;
if(mp[0][k] == -1)
gt = ask(k);
else
gt.pb(mp[0][k]) , gt.pb(mp[1][k]);
mp[0][k] = gt[0];
mp[1][k] = gt[1];
int sum = gt[0] + gt[1];
x = gt[0];
if(sum == 0)
return k;
if(sum < mx)
v.push_back({sum , k});
else
break;
k++;
}
}
sort(v.begin() , v.end());
return v[0].second;
}
