Submission #1248804

#TimeUsernameProblemLanguageResultExecution timeMemory
1248804DeathIsAwePrisoner Challenge (IOI22_prison)C++20
80 / 100
14 ms1348 KiB
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define ff first
#define ss second
#define pb push_back
#define ll long long


int base3(int a, int pos) {
    for (int i=0;i<pos-1;i++) {
        a /= 3;
    }
    return a % 3;
}


vector<vector<int>> devise_strategy(int n) {
    vector<vector<int>> ansvec(23);
    ansvec[0].pb(0);
    for (int i=1;i<23;i++) {
        if (((i - 1) / 3) % 2 == 0) {
            ansvec[i].pb(1);
        } else {
            ansvec[i].pb(0);
        }
    }
    for (int i=1;i<n+1;i++) {
        ansvec[0].pb(base3(i, 8) + 1);
    }


    int temp1, temp2;
    for (int i=1;i<8;i++) {
        for (int j=1;j<n+1;j++) {
            temp1 = base3(j, 9 - i);
            temp2 = 3 * i + base3(j, 8 - i) + 1;
            //if (i == 7) {
            //    cout << temp1 << ' ' << temp2 << '\n';
            //}
            for (int k=0;k<3;k++) {
                if (temp1 > k) {
                    if (i % 2 == 0) ansvec[3 * i - (2 - k)].pb(-2);
                    else ansvec[3 * i - (2 - k)].pb(-1);
                } else if (temp1 < k) {
                    if (i % 2 == 0) ansvec[3 * i - (2 - k)].pb(-1);
                    else ansvec[3 * i - (2 - k)].pb(-2);
                } else {
                    if (i == 7) {
                        if (j % 3 == 0) {
                            ansvec[3 * i - (2 - k)].pb(-2);
                        } else if (j % 3 == 2) {
                            ansvec[3 * i - (2 - k)].pb(-1);
                        } else {
                            ansvec[3 * i - (2 - k)].pb(22);
                        }
                    } else {
                        ansvec[3 * i - (2 - k)].pb(temp2);
                    }
                }
            }
        }
    }
    for (int i=1;i<n+1;i++) {
        if (i % 3 == 0) {
            ansvec[22].pb(-1);
        } else if (i % 3 == 2) {
            ansvec[22].pb(-2);
        } else {
            ansvec[22].pb(0);
        }
    }


    return ansvec;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...