#include "cmp.h"
#include <iostream>
#include <string>
using namespace std;
int cum[7];
//string quat(int n) {
// string s(6, '0');
// for (int i = 0; i < 6; i++)
// s[i] += (n >> i*2) & 3;
// reverse(s.begin(), s.end());
// return s;
//}
void remember(int a) {
cum[0] = 1;
for (int i = 1; i < 7; i++) {
cum[i] = cum[i-1] + (1 << (14 - 2*i)) + 500;
}
for (int i = 0; i < 7; i++) {
bit_set(cum[i] + (a >> i*2));
// cout << quat((a >> i*2)) << '\n';
}
// cout<<'\n';
}
int compare(int b) {
#define f(i) bit_get(cum[i] + (b >> i*2))
int ans;
int l = -1, r = 6;
while (l+1 < r) {
int mid = (l+r)/2;
if (f(mid)) r = mid;
else l = mid;
}
if (l == -1) return 0;
b >>= 2*l;
if (b % 4 == 0) ans = -1;
if (b % 4 == 1) ans = bit_get(b + cum[l] - 1) ? 1 : -1;
if (b % 4 == 2) ans = bit_get(b + cum[l] + 1) ? -1 : 1;
if (b % 4 == 3) ans = 1;
return ans;
// short l = 0, r = 7;
// while (l+1 < r) {
// short mid = (l+r)/2;
// cout << mid << ' ' << quat((b >> mid*2)) << ' '<< bit_get(cum[mid] + (b >> mid*2))<< '\n';
// if (bit_get(cum[mid] + (b >> mid*2))) {
// r = mid;
// } else {
// l = mid;
// }
// }
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |