# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
480796 | 2021-10-18T04:36:35 Z | minhcool | 비교 (balkan11_cmp) | C++17 | 0 ms | 0 KB |
#include "cmp.h" #define set_bit bit_set #define get_bit bit_get 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 = 1, r = 7; while(l < r){ int mid = (l + r) >> 1; int pw = 1, sum = 0; for(int i = 1; i <= min(mid, 6LL); 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 + 1; else r = mid; } if(l == 7) return 0; 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; }