Submission #1310121

#TimeUsernameProblemLanguageResultExecution timeMemory
1310121em4ma2비교 (balkan11_cmp)C++20
0 / 100
394 ms82616 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; // } 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}; void sett(int x){ bit_set(x+1); return; } int get(int x){ return bit_get(x+1); } void remember(int a){ vector<int>dig; string x=to_string(a); for (int i=x.size();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>dig; string x=to_string(b); for (int i=x.size();i>=0;i--){ dig.pb(x[i]-'0'); } while (dig.size()<4){ dig.pb(0); } 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 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...