| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1310128 | em4ma2 | cmp (balkan11_cmp) | C++20 | 0 ms | 0 KiB |
//i know it's wrong so ignore it
#include "bits/stdc++.h"
//#include "cmp.h"
using namespace std;
//#define int long long
#define ll long long
#define pb push_back
// unsigned char boiMem[4096][10248];
// int boiOrder[16777216];
// int boiAccesses;
// int boiPhase;
// int boi_guessval;
// int boi_cmpval;
// int boi_storeval;
// void bit_set(int addr)
// {
// if(boiPhase == 2) {
// fprintf(stderr, "ZERO POINTS: bit_set called by compare()\n");
// exit(1);
// }
// if((addr > 10240) || (addr < 1)) {
// fprintf(stderr, "ZERO POINTS: bit_set with addr out of range %d\n", addr);
// exit(1);
// }
// boiMem[boi_storeval][addr] |= 1;
// //fprintf(stderr, " %d",addr);
// boiAccesses++;
// if(boiAccesses > 20) {
// fprintf(stderr, "ERROR: bit_set called more than 20 times\n");
// exit(1);
// }
// }
// int bit_get(int addr)
// {
// if(boiPhase == 1) {
// fprintf(stderr, "ZERO POINTS: bit_get called by remember()\n");
// exit(1);
// }
// //fprintf(stderr, " %d",addr);
// boiAccesses++;
// if((addr > 10240) || (addr < 1)) {
// fprintf(stderr, "ZERO POINTS: bit_get with address out of range\n");
// exit(1);
// }
// return boiMem[boi_guessval][addr]?1:0;
// }
void sett(int x){
bit_set(x+1);
return;
}
int get(int x){
return bit_get(x-1);
}
void remember(int a){
vector<int>_0000={34,1,2,3,4};
vector<int>_000={33,5,6,7,8,9,10,11,12};
vector<int>_00={32,13,14,15,16,17,18,19,20};
vector<int>_0={0,21,22,23,24,25,26,27,28};
vector<int>dig;
string x=to_string(a);
for (int i=x.size()-1;i>=0;i--){
int k=x[i]-'0';
dig.pb(k);
}
int l=0;
for (int i=0;i<dig.size();i++){
if (l==0){
sett(_0[dig[i]]);
}else if (l==1){
sett(_00[dig[i]]);
}else if (l==2){
sett(_000[dig[i]]);
}else if (l==3){
sett(_0000[dig[i]]);
}
}
}
int compare(int b){
vector<int>_0000={34,1,2,3,4};
vector<int>_000={33,5,6,7,8,9,10,11,12};
vector<int>_00={32,13,14,15,16,17,18,19,20};
vector<int>_0={0,21,22,23,24,25,26,27,28};
vector<int>dig;
string x=to_string(b);
cout<<x<<endl;
for (int i=x.size()-1;i>=0;i--){
//cout<<x[i]<<endl;
dig.pb(x[i]-'0');
}
while (dig.size()<4){
dig.pb(0);
}
// for (auto x:dig){
// cout<<x<<endl;
// }
int ans=0;
reverse(dig.begin(),dig.end());
for (int i=0;i<dig.size();i++){
if (ans!=0)break;
for (int j=9;j>=0;j--){
if (i==0){
if (j>4)continue;
bool l=get(_0000[j]);
int k=l*j;
if (l){
if (k>dig[i]){
ans=-1;
break;
}else if (k==dig[i]){
break;
}else{
ans=1;
break;
}
}
}else if (i==1){
bool l=get(_000[j]);
int k=l*j;
if (l){
if (k>dig[i]){
ans=-1;
break;
}else if (k==dig[i]){
break;
}else{
ans=1;
break;
}
}
}else if (i==2){
bool l=get(_00[j]);
int k=l*j;
if (l){
if (k>dig[i]){
ans=-1;
break;
}else if (k==dig[i]){
break;
}else{
ans=1;
break;
}
}
}else if (i==3){
bool l=get(_0[j]);
int k=l*j;
if (l){
if (k>dig[i]){
ans=-1;
break;
}else if (k==dig[i]){
break;
}else{
ans=1;
break;
}
}
}
}
}
return ans;
}
// int main()
// {
// int a,b;
// cin>>a>>b;
// remember(a);
// cout<<compare(b)<<endl;
// int maxa = 0, maxb = 0, x, y, i;
// boiPhase = 1;
// //fprintf(stderr, "Phase 1: remember() calls\n");
// for(boi_storeval = 0; boi_storeval < 4096; boi_storeval++) {
// //fprintf(stderr, "[a=%d] set_bit:", boi_storeval);
// boiAccesses =0;
// remember(boi_storeval);
// if(boiAccesses > maxa)
// maxa = boiAccesses;
// //fprintf(stderr, "\n", boiAccesses);
// }
// //fprintf(stderr,"max accesses:%d\n",maxa);
// //fprintf(stderr,"Phase 2: compare() calls\n");
// boiPhase = 3;
// for (i=0; i<16777216; i++) boiOrder[i]=i;
// srand(2);
// for (i=1; i<16777216; i++) {
// int t=rand();
// if(RAND_MAX<=32768)t=t*32768+rand();
// x=t%i;
// y=boiOrder[i];
// boiOrder[i]=boiOrder[x];
// boiOrder[x]=y;
// }
// srand(2);
// for (i=0; i<16777216; i++) {
// boi_guessval=boiOrder[i] % 4096;
// boi_cmpval =boiOrder[i] / 4096;
// //fprintf(stderr,"guess=%d compare=%d get_bit:",boi_guessval,boi_cmpval);
// boiAccesses=0;
// x=compare(boi_cmpval);
// y=0;
// if (boi_cmpval>boi_guessval)
// y=1;
// if (boi_cmpval<boi_guessval)
// y=-1;
// if (x!=y) {
// fprintf(stderr, "ZERO POINTS: For a=%d and b=%d, correct answer is %d, got %d\n",boi_guessval,boi_cmpval,y,x);
// exit(1);
// }
// if (boiAccesses>maxb)
// maxb=boiAccesses;
// //fprintf(stderr,"\n");
// }
// boiPhase=2;
// x=maxa+maxb;
// if (x>20)
// fprintf(stderr, "ZERO POINTS: more than 20 accesses in the worst case\n");
// fprintf(stderr, "maxAccesses = %d\n", x);
//return 0;
// }
