Submission #1309505

#TimeUsernameProblemLanguageResultExecution timeMemory
1309505ereringcmp (balkan11_cmp)C++20
100 / 100
1367 ms102320 KiB
#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 timeMemoryGrader output
Fetching results...