제출 #1118875

#제출 시각아이디문제언어결과실행 시간메모리
1118875andrei_iorgulescuSpeedrun (RMI21_speedrun)C++14
100 / 100
402 ms1808 KiB
#include <bits/stdc++.h> #include "speedrun.h" using namespace std; int nnn; vector<int> g[1005]; int preord[1005], cr; bool ff(int x) { if (x == 0) return false; return true; } void dfs(int nod, int tata) { //cout << "oo " << nod << ' ' << tata << endl; preord[++cr] = nod; for (int i = 0; i < 10; i++) setHint(nod, i + 1, ff(tata & (1 << i))); for (auto vecin : g[nod]) if (vecin != tata) dfs(vecin, nod); } void assignHints(int subtask, int N, int A[], int B[]) { setHintLen(20); nnn = N; for (int i = 1; i < nnn; i++) { g[A[i]].push_back(B[i]); g[B[i]].push_back(A[i]); } dfs(1, 0); //for (int i = 1; i <= nnn; i++) // cout << preord[i] << ' '; //cout << endl; for (int i = 1; i <= nnn; i++) { int nd = preord[i], urm = preord[i % nnn + 1]; for (int j = 10; j < 20; j++) setHint(nd, j + 1, ff(urm & (1 << (j - 10)))); } } int u() { int x = 0; for (int i = 10; i < 20; i++) { if (getHint(i + 1)) x += (1 << (i - 10)); } return x; } int tt() { int x = 0; for (int i = 0; i < 10; i++) { if (getHint(i + 1)) x += (1 << i); } return x; } void speedrun(int subtask, int N, int start) { int nod = start; nnn = N; while (true) { int trg = u(); //cout << "uh " << nod << ' ' << trg << endl; if (trg == start) break; while (true) { //cout << "wo " << nod << ' ' << tt() << endl; if (nod == trg) break; if (goTo(trg)) { nod = trg; break; } //cout << "woo " << nod << ' ' << tt() << endl; int lol = tt(); goTo(tt()); //cout << "wooo " << nod << ' ' << tt() << endl; nod = lol; } } }
#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...