| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1352233 | KALARRY | 커다란 상품 (IOI17_prize) | C++20 | 0 ms | 0 KiB |
//chockolateman
#include<bits/stdc++.h>
// #include "prize.h"
using namespace std;
int search(int start,int end)
{
if(start > end)
return -1;
int mid = (start + end)/2;
vector<int> temp = ask(mid);
if(temp[0]==0 && temp[1]==0)
return mid;
int l = -1;
if(temp[0] != 0)
l = search(start,mid-1);
int r = -1;
if(temp[1] != 0)
r = search(mid+1,end);
return max(l,r);
}
int find_best(int n) {
int S = ceil(sqrt(n/500.000));
int l = 0;
int least_expensive = 0;
vector<int> temp;
for(int i = 0 ; i < min(500,n) ; i++)
{
temp = ask(i);
least_expensive = max(least_expensive,temp[0] + temp[1]);
}
int cnt_special = 0;
int pos = -1;
while(l < n)
{
int r = min(n-1,l+S-1);
temp = ask(r);
int cur_score = temp[0] + temp[1];
if(cur_score != least_expensive || temp[0] > cnt_special)
{
for(int i = l ; i <= r ; i++)
{
temp = ask(i);
cur_score = temp[0] + temp[1];
if(cur_score != least_expensive)
cnt_special++;
if(cur_score==0)
pos = i;
}
}
l = r + 1;
}
return pos;
}