# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
480801 | minhcool | 비교 (balkan11_cmp) | C++17 | 1603 ms | 96012 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "cmp.h"
#define set_bit bit_set
#define get_bit bit_get
int min(int x, int y){
return (x < y ? x : y);
}
void remember(int n) {
//edit this
set_bit(1 + ((n >> 10) & 3));
set_bit(5 + ((n >> 8) & 15));
set_bit(21 + ((n >> 6) & 63));
set_bit(85 + ((n >> 4) & 255));
set_bit(341 + ((n >> 2) & 1023));
set_bit(1365 + (n & 4095));
//set_bit(5461 + (n & 4095));
}
int compare(int b) {
//edit this
int l = 0, r = 6;
while(l < r){
int mid = (l + r + 1) >> 1;
int pw = 1, sum = 0;
for(int i = 1; i <= min(mid, 6); i++){
sum += pw;
pw *= 4;
}
if(mid == 7) sum += pw;
int temp = (b >> (12 - 2 * mid)) & (pw - 1);
if(get_bit(sum + temp)) l = mid;
else r = mid - 1;
}
if(l == 6) return 0;
l++;
int tempor = (b >> (12 - 2 * l)) & 3;
if(tempor >= 2){
for(int i = tempor + 1; i <= 3; i++){
b += (1LL << (12 - 2 * l));
int sum = 0, pw = 1;
for(int i = 1; i <= l; i++){
sum += pw;
pw *= 4;
}
int temp = (b >> (12 - 2 * l)) & (pw - 1);
if(get_bit(sum + temp)) return -1;
}
return 1;
}
else{
for(int i = tempor - 1; i >= 0; i--){
b -= (1LL << (12 - 2 * l));
int sum = 0, pw = 1;
for(int i = 1; i <= l; i++){
sum += pw;
pw *= 4;
}
int temp = (b >> (12 - 2 * l)) & (pw - 1);
if(get_bit(sum + temp)) return 1;
}
return -1;
}
//return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |