Submission #625546

#TimeUsernameProblemLanguageResultExecution timeMemory
625546jeroenodbPrisoner Challenge (IOI22_prison)C++17
80 / 100
13 ms1072 KiB
#include "prison.h"
#include <array>
#include <vector>
using namespace std;
const int D = 11;
std::vector<std::vector<int>> devise_strategy(int N) {
    array<int,D> dig = {2,2,2,2,2,2,3,3,3,3,1};
    array<int,D> pw = {1};
    for(int i=1;i<D;++i) pw[i]=pw[i-1]*dig[i-1];
    auto extractDig = [&](int n, int i) {
       n/=pw[i];
       return n%dig[i];
    };
    auto endResult = [&](int dif, int f) {
        if(f==0) dif=-dif;
        if(dif<=0) return -2;
        else return -1;
    };
    vector<vector<int>> res;
    
    for(int i=D-1;i>=1;--i) {
        // if(pw[i]>=N) continue;
        int at = res.size();
        // before
        vector<int> cur(N+1);
        for(int d=0;d<dig[i];++d) {
            cur[0]=i&1;
            for(int b=0;b<N;++b) {
                if(extractDig(b,i)!=d) {
                    cur[b+1] = endResult(extractDig(b,i)-d, cur[0]);
                } else if(i==1) {
                    cur[b+1] = endResult((b&1)*2-1,cur[0]);
                } else {
                    cur[b+1] = at+dig[i]+extractDig(b,i-1);
                }
            }
            res.push_back(cur);
        }
    }
    return res;
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...