Submission #855550

# Submission time Handle Problem Language Result Execution time Memory
855550 2023-10-01T12:12:05 Z lolismek Speedrun (RMI21_speedrun) C++14
100 / 100
134 ms 1912 KB
#include "speedrun.h"

using namespace std;

#include <vector>
#include <set>
#include <iostream>

const int NMAX = 1001;

vector <int> adj[NMAX + 1];

int dfsTime = 0;

int par[NMAX + 1];
int lin[NMAX + 1];

void dfs(int node, int parent){
    par[node] = parent;
    lin[++dfsTime] = node;
    for(int child : adj[node]){
        if(child != parent){
            dfs(child, node);
        }
    }
}

void assignHints(int subtask, int N, int A[], int B[]){
    for(int i = 1; i <= N - 1; i++){
        adj[A[i]].push_back(B[i]);
        adj[B[i]].push_back(A[i]);
    }

    setHintLen(20);
    dfs(1, 0);

    lin[N + 1] = lin[1];
    for(int i = 1; i <= N; i++){
        for(int j = 0; j < 10; j++){
            setHint(lin[i], j + 1, par[lin[i]] & (1 << j));
            setHint(lin[i], j + 1 + 10, lin[i + 1] & (1 << j));
        }
    }
}

void speedrun(int subtask, int N, int start){
    int node = start;

    for(int i = 1; i <= N - 1; i++){
        int p = 0, x = 0;
        for(int i = 1; i <= 10; i++){
            p += (1 << (i - 1)) * getHint(i);
            x += (1 << (i - 1)) * getHint(i + 10);
        }

        while(!goTo(x)){
            node = p;
            goTo(node);
            p = 0;
            for(int i = 1; i <= 10; i++){
                p += (1 << (i - 1)) * getHint(i);
            }
        }

        node = x;
    }
}
# Verdict Execution time Memory Grader output
1 Correct 124 ms 1652 KB Output is correct
2 Correct 96 ms 1560 KB Output is correct
3 Correct 125 ms 1316 KB Output is correct
4 Correct 115 ms 1552 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 122 ms 1648 KB Output is correct
2 Correct 112 ms 1400 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 131 ms 1140 KB Output is correct
2 Correct 93 ms 1808 KB Output is correct
3 Correct 97 ms 1140 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 133 ms 1140 KB Output is correct
2 Correct 92 ms 1388 KB Output is correct
3 Correct 119 ms 1816 KB Output is correct
4 Correct 113 ms 1392 KB Output is correct
5 Correct 109 ms 1812 KB Output is correct
6 Correct 134 ms 1564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 107 ms 1136 KB Output is correct
2 Correct 88 ms 1396 KB Output is correct
3 Correct 121 ms 1912 KB Output is correct
4 Correct 113 ms 1156 KB Output is correct
5 Correct 105 ms 1660 KB Output is correct
6 Correct 111 ms 1396 KB Output is correct
7 Correct 93 ms 1412 KB Output is correct