Submission #434747

#TimeUsernameProblemLanguageResultExecution timeMemory
434747MonchitoAncient Books (IOI17_books)C++14
12 / 100
1 ms332 KiB
#include "books.h"
#include <iostream>
using namespace std;
using ll = long long;

vector<pair<vector<int>, int>> x[4];

void calc() {
    //n = 1, s=0
    x[0].push_back( { { 0 } , 0 } );

    //n = 2, s=0
    x[1].push_back( { { 0, 1 } , 0 } );
    x[1].push_back( { { 1, 0 } , 2 } );

    
    //n = 3, s=0
    x[2].push_back( { { 0, 1, 2 } , 0 } );
    x[2].push_back( { { 0, 2, 1 } , 4 } );
    x[2].push_back( { { 1, 0, 2 } , 2 } );
    x[2].push_back( { { 2, 1, 0 } , 4 } );
    x[2].push_back( { { 2, 0, 1 } , 4 } );
    x[2].push_back( { { 1, 2, 0 } , 4 } );


    //n = 4, s=0
    x[3].push_back( { { 0, 1, 2, 3 } , 0 } );
    x[3].push_back( { { 1, 0, 2, 3 } , 2 } );
    x[3].push_back( { { 0, 1, 3, 2 } , 6 } );
    x[3].push_back( { { 1, 0, 3, 2 } , 8 } );
    x[3].push_back( { { 0, 2, 1, 3 } , 4 } );
    x[3].push_back( { { 3, 2, 1, 0 } , 8 } );
    x[3].push_back( { { 3, 1, 2, 0 } , 6 } );
    x[3].push_back( { { 2, 1, 0, 3 } , 4 } );
    x[3].push_back( { { 2, 3, 0, 1 } , 8 } );
    x[3].push_back( { { 0, 2, 3, 1 } , 6 } );
    x[3].push_back( { { 1, 2, 3, 0 } , 6 } );
    x[3].push_back( { { 1, 3, 2, 0 } , 6 } );
    x[3].push_back( { { 0, 3, 2, 1 } , 6 } );
    x[3].push_back( { { 1, 3, 0, 2 } , 6 } );
    x[3].push_back( { { 2, 3, 1, 0 } , 8 } );
    x[3].push_back( { { 0, 3, 1, 2 } , 6 } );
    x[3].push_back( { { 3, 2, 0, 1 } , 8 } );
    x[3].push_back( { { 2, 1, 3, 0 } , 6 } );
    x[3].push_back( { { 3, 1, 0, 2 } , 6 } );
    x[3].push_back( { { 1, 2, 0, 3 } , 4 } );
    x[3].push_back( { { 2, 0, 1, 3 } , 4 } );
    x[3].push_back( { { 2, 0, 3, 1 } , 6 } );
    x[3].push_back( { { 3, 0, 1, 2 } , 6 } );
    x[3].push_back( { { 3, 0, 2, 1 } , 6 } );
}

ll minimum_walk(vector<int> p, int s) {
    calc();
    int n = (int)p.size();

    for(int i=0; i<(int)x[n-1].size(); i++) {
        bool can = true;

        for(int j=0; j<n; j++) {
            if(x[n-1][i].first[j] != p[j]) can = false;
        }

        if(can) return x[n-1][i].second;
    }

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