Submission #1177791

#TimeUsernameProblemLanguageResultExecution timeMemory
1177791PagodePaivaPrisoner Challenge (IOI22_prison)C++20
90 / 100
8 ms1096 KiB
#include "prison.h"
#include<bits/stdc++.h>

using namespace std;

std::vector<std::vector<int>> devise_strategy(int n) {
    vector <vector <int>> res;
    int minval = 21, maxval = -1;
    for(int i = 0;i <= 21;i++){
        vector <int> ans;
        ans.push_back(((i+1)/2)%2);
        for(int val = 1;val <= n;val++){
            int l = 1, r = n;
            int j = (i+1)/2;
            while(j > 0){
                if(val == l){
                    ans.push_back(-ans[0]-1);
                    break;
                }
                if(val == r){
                    ans.push_back(-(ans[0]^1)-1);
                    break;
                }
                l++;
                r--;
                int t = (l+r)/2;
                if(l <= val and val <= t){
                    if(j == 1){
                        if(i%2 == 0){
                            ans.push_back(-ans[0]-1);
                            break;
                        }
                    }
                    r = t;
                }
                else{
                    if(j == 1){
                        if(i%2 == 1){
                            ans.push_back(-(ans[0]^1)-1);
                            break;
                        }
                    }
                    l = t+1;
                }
                j--;
            }
            if(j > 0) continue;
            //if(i == 1) cout << i << ' ' << val << ' ' << l << ' ' << r << '\n';
            if(val == l) ans.push_back(-ans[0]-1);
            else if(val == r) ans.push_back(-(ans[0]^1)-1);
            else{
                l++;
                r--;
                int t = (l+r)/2;
                if(l <= val and val <= t){
                    int x = (i+1)/2;
                    ans.push_back(2*x+1);
                }
                else{
                    int x = (i+1)/2;
                    ans.push_back(2*x+2);
                }
            }
        }
        res.push_back(ans);
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...