#include <bits/stdc++.h>
#include "cmp.h"
using namespace std;
void remember(int n){
int x=0;
for(int i=11;i>=0;i--){
int cur=(n>>i);
if(i%2==0)bit_set(x+cur);
x+=(1<<(12-i));
}
}
int compare(int b) {
vector<int> all={0,2,4,6,8,10};
int st[12],x=0;
for(int i=11;i>=0;i--){
st[i]=x;
x+=(1<<(12-i));
}
int l=0,r=all.size()-1;
while(l<r){
int mid=(l+r)/2;
int val=all[mid];
int pos=st[val]+(b>>val);
if(bit_get(pos))r=mid;
else l=mid+1;
}
//they are the same for suffix all[l] (unless all[l]=10 then maybe)
if(l==0)return 0;
int diff=all[l]-2; //they differ at either diff or diff+1;
if(all[l]==10){
int pos=st[10]+(b>>10);
if(!bit_get(pos))diff=10;
}
// if(b==1386)cout<<diff<<endl;
if(((b>>(diff+1))&1)==((b>>diff)&1)){
if((b>>diff)&1)return 1;
return -1;
}
if((b>>(diff+1))&1){
int val=st[diff]+(b>>diff)+1;
if(bit_get(val))return -1;
return 1;
}
int val=st[diff]+(b>>diff)-1;
// if(b==1386)cout<<val<<endl;
if(bit_get(val))return 1;
return -1;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |