Submission #1310130

#TimeUsernameProblemLanguageResultExecution timeMemory
1310130em4ma2cmp (balkan11_cmp)C++20
0 / 100
381 ms82572 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;
// }
#Verdict Execution timeMemoryGrader output
Fetching results...