이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
vector<int> ask(int i);/*{
cout << i << '\n';
vector<int> a(2);
cin >> a[0] >> a[1];
return a;
}*/
int clol, ans;
bool wegood = false;
void solve(int l, int r, int lpl, int lpr){
int m = l+r>>1;
auto a = ask(m);
if(a[0]+a[1] == 0) {
ans = m;
wegood = true;
return;
}
if(a[0]+a[1] == clol){
if(a[0] > lpl && l < m) solve(l, m-1, lpl, a[1]);
if(wegood) return;
if(a[1] > lpr && r > m) solve(m+1, r, a[0], lpr);
return;
}
int L = m-1, R = m+1;
while(R < r){
auto a = ask(R);
if(a[0]+a[1]==0){
ans = R;
wegood = true;
return;
}
if(a[0]+a[1]==clol){
if(a[1] > lpr && R < r) solve(R+1, r, a[0], lpr);
if(wegood) return;
break;
}
R++;
}
while(L > l){
auto a = ask(L);
if(a[0]+a[1]==0){
ans = L;
wegood = true;
return;
}
if(a[0]+a[1]==clol){
if(a[0] > lpl && L > l) solve(l, L-1, lpl, a[1]);
if(wegood) return;
break;
}
L--;
}
}
int find_best(int n){
pair<int, pair<int, int>> lol = {0,{0, 0}};
for(int i = 0;i < 475;i++){
auto a = ask(i);
if(a[0]+a[1] == 0) return i;
lol = max(lol, make_pair(a[0]+a[1], make_pair(a[0], i)));
}
clol = lol.first;
solve(lol.second.second+1, n-1, lol.second.first, 0);
return ans;
}/*
int main(){
int n;
cin >> n;
cout << find_best(n) << '\n';
}*/
컴파일 시 표준 에러 (stderr) 메시지
prize.cpp: In function 'void solve(int, int, int, int)':
prize.cpp:12:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
12 | int m = l+r>>1;
| ~^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |