Submission #737076

#TimeUsernameProblemLanguageResultExecution timeMemory
737076mjhmjh1104Speedrun (RMI21_speedrun)C++17
0 / 100
210 ms868 KiB
#include "speedrun.h" #include <cstdio> #include <vector> using namespace std; int n; vector<int> adj[1006]; bool visited[1006]; void assign(int x, int y, int z) { for (int i = 0; i < 10; i++) setHint(x + 1, y * 10 + i + 1, z & 1 << i ? true : false); } int get(int y) { int ret = 0; for (int i = 0; i < 10; i++) ret |= getHint(y * 10 + i + 1) << i; return ret; } void _dfs(int x, int prev = -1) { int pv = -1; for (auto &i: adj[x]) if (i != prev) { if (pv == -1) assign(x, 0, i); else assign(pv, 1, i); pv = i; _dfs(i, x); } if (pv == -1) assign(x, 0, 1023); else assign(pv, 1, x); } void assignHints(int subtask, int n, int a[], int b[]) { ::n = n; for (int i = 1; i < n; i++) { adj[a[i] - 1].push_back(b[i] - 1); adj[b[i] - 1].push_back(a[i] - 1); } setHintLen(20); assign(0, 1, 1023); _dfs(0); } void dfs(int x, int prev = -1) { visited[x] = true; int child = get(0); if (child != 1023 && !visited[child]) { goTo(child + 1); dfs(child); goTo(x + 1); } int nx = get(1); if (nx != 1023 && !visited[nx]) { goTo(nx + 1); dfs(nx); goTo(x + 1); } } void speedrun(int subtask, int n, int st) { ::n = n; dfs(st - 1); }
#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...