# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
304858 | tatyam | Hotter Colder (IOI10_hottercolder) | C++17 | 816 ms | 24568 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int Guess(int G);
struct T{
map<int, int> a;
T(){
for(int n = 1; n < 30; n++){
const int x = ((1 << n + 1) + (n & 1 ? -1 : 1)) / 3;
const int y = ((1 << n) + (n & 1 ? -1 : 1) * 2) / 3 + 1;
a[x] = y;
}
}
int operator[](int x) const {
return a.upper_bound(x)->second;
}
} edge;
int HC(int N){
if(N == 1) return 1;
int l = 1, r = N, p = (l + r) / 2 + 1;
Guess(p);
bool first = 1;
while(l < r){
const int p2 = [&]{
if(first){
first = 0;
return (l + r) / 2;
}
if(p == 1){
return clamp(l * 2 - 2 + edge[r - l], 1, N);
}
if(p == N){
return clamp(r * 2 - N + 1 - edge[r - l], 1, N);
}
int ans = clamp(l + r - p, 1, N);
if(l <= ans && ans <= r && (r - l + 1) & 2) if(ans < p && (ans ^ l) & 1 || ans > p && (ans ^ r) & 1){
if(N - r > l - 1) ans--;
else ans++;
}
if(ans == p){
if(N - r > l - 1) ans--;
else ans++;
}
return ans;
}();
int ans = Guess(p2);
if(ans == 0) return (p + p2) / 2;
if(ans == 1){
if(p2 < p) r = (p + p2 - 1) / 2;
else l = (p + p2 + 2) / 2;
}
else{
if(p2 < p) l = (p + p2 + 2) / 2;
else r = (p + p2 - 1) / 2;
}
p = p2;
}
return l;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |