Submission #1239890

#TimeUsernameProblemLanguageResultExecution timeMemory
1239890nikulidPrisoner Challenge (IOI22_prison)C++20
38 / 100
11 ms1608 KiB
#include "prison.h" #include <assert.h> #include <vector> #include <iostream> using namespace std; bool debug=0; #define derr if(debug)cerr #define pb push_back vector<vector<int>> devise_strategy(int N) { vector<vector<int>> answer; vector<int> cur(N+1,0); int digit; derr<<"process called!\n"; // (0) A: THOUSAND's digit cur[0] = 0; // inspect bag A! cur[N] = -2; cur[1] = -1; // (edge cases) for(int i=2; i<N; i++){ digit = i/1000; cur[i] = digit+1; // everything will be in the range {1:5} (inclusive). } derr<<"right before first answer.pb(cur)... "; answer.pb(cur); derr<<"done :)\n"; // (1-5) B: check thousand's digit for(int D=0; D<=4; D++){ derr<<"$ D="<<D<<"\n"; cur[0] = 1; // inspect bag B! cur[N] = -1; cur[1] = -2; // (edge cases) for(int i=2; i<N; i++){ digit = i/1000; if(digit<D){ cur[i] = -2; } else if(digit>D){ cur[i] = -1; } else{ cur[i] = 6; } } answer.pb(cur); } derr<<"(1-5) init complete!\n"; derr<<"`answer` is now of size "<<answer.size()<<"\n"; for(int i=6; i<=8; i++)answer.pb(vector<int>(N+1, 0)); // (6-8) A: move on to the appropriate digit cur[0] = 0; // inspect bag A! for(int i=2; i<N; i++){ digit = (i%1000)/100; answer[6][i] = 10 + digit; digit = (i%100)/10; answer[7][i] = 20 + digit; digit = (i%10); answer[8][i] = 30 + digit; if(answer[8][i]==39) answer[8][i]=9; } // (9) B: check one's digit int D=9; cur[0] = 1; // inspect bag B! for(int i=2; i<N; i++){ digit = i%10; if(digit<D){ cur[i] = -2; } else if(digit>D){ cur[i] = -1; } else{ cur[i] = 0; } } answer.pb(cur); // (10-19) B: check hundred's digit for(int D=0; D<=9; D++){ cur[0] = 1; // inspect bag B! for(int i=2; i<N; i++){ digit = (i%1000)/100; if(digit<D){ cur[i] = -2; } else if(digit>D){ cur[i] = -1; } else{ cur[i]=7; } } answer.pb(cur); } derr<<"the first index of (20-29) will be "<<answer.size()<<"!\n"; // (20-29) B: check ten's digit for(int D=0; D<=9; D++){ cur[0] = 1; // inspect bag B! for(int i=2; i<N; i++){ digit = (i%100)/10; if(digit<D){ cur[i] = -2; } else if(digit>D){ cur[i] = -1; } else{ cur[i]=8; } } answer.pb(cur); } // (30-39) B: check one's digit for(int D=0; D<=8; D++){ cur[0] = 1; // inspect bag B! for(int i=2; i<N; i++){ digit = (i%10); if(digit<D){ cur[i] = -2; } else if(digit>D){ cur[i] = -1; } else{ cur[i]=0; // although this should technically never happen... } } answer.pb(cur); } derr<<"answer has length "<<answer.size()<<"\n"; return answer; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...