# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1095575 | 2024-10-02T15:05:30 Z | peti1234 | Speedrun (RMI21_speedrun) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> #include "speedrun.h" using namespace std; const int c=1005; int n, fel[c]; vector<int> sz[c], sor; bool v[c]; void dfs(int a) { v[a]=true; sor.push_back(a); for (auto x:sz[a]) { if (!v[x]) { fel[x]=a; dfs(x); } } } void assignHints(int st, int N, int[] A, int[] B) { n=N; for (int i=0; i<n-1; i++) { int x=A[i], y=B[i]; sz[x].push_back(y), sz[y].push_back(x); } dfs(1); setHintLen(20); for (int i=1; i<=n; i++) { for (int j=0; j<10; j++) { if (fel[i] & (1<<j)) { setHint(i, j+1, 1); } } } for (int i=0; i<n-1; i++) { int a=sor[i], b=sor[i+1]; for (int j=0; j<10; j++) { if (b & (1<<j)) { setHint(a, j+11, 1); } } } } int felett() { int res=0; for (int i=0; i<10; i++) { if (getHint(i)) { res+=(1<<i); } } return res; } int kov() { int res=0; for (int i=0; i<10; i++) { if (getHint(i+10)) { res+=(1<<i); } } return res; } bool lep(int a) { return goTo(a); } void speedrun(int st, int N, int pos) { n=N; while (pos!=1) { int s=felett(); lep(s); pos=s; } int cel=kov(); for (int i=1; i<n; i++) { while (!lep(cel)) { int f=felett(); lep(f); pos=f; } pos=cel; cel=kov(); } return; }