제출 #1257669

#제출 시각아이디문제언어결과실행 시간메모리
1257669biank이주 (IOI25_migrations)C++20
30 / 100
30 ms1048 KiB
#include "migrations.h" #include <bits/stdc++.h> using namespace std; #define forsn(i, s, n) for (int i = int(s); i < int(n); i++) #define forn(i, n) forsn(i, 0, n) #define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--) #define dforn(i, n) dforsn(i, 0, n) using vi = vector<int>; using ll = long long; using ii = pair<int, int>; #define fst first #define snd second #define sz(x) int(x.size()) #define all(x) begin(x), end(x) #define pb push_back #define eb emplace_back const int MAX_N = 100000; const int MAX_K = 14; int up[MAX_K][MAX_N], depth[MAX_N]; int lca(int u, int v) { if (depth[u] < depth[v]) swap(u, v); int diff = depth[u] - depth[v]; forn(i, MAX_K) if (diff >> i & 1) u = up[i][u]; if (u == v) return u; dforn(i, MAX_K) if (up[i][u] != up[i][v]) { u = up[i][u], v = up[i][v]; } assert(up[0][u] == up[0][v]); return u; } int dist(int u, int v) { return depth[u] + depth[v] - 2 * depth[lca(u, v)]; } int u = 0, v = 0; int message; int type = 0; int send_message(int N, int i, int Pi) { up[0][i] = Pi, depth[i] = depth[Pi] + 1; forn(j, MAX_K - 1) up[j + 1][i] = up[j][up[j][i]]; int state = 0; if (dist(i, v) > dist(u, v)) u = i, state = 1; else if (dist(i, u) > dist(u, v)) v = i, state = 2; if (i == N - 28) { message = u, type = 1; } if (i == N - 14) { message = v, type = 2; } if (!type) return 0; int bit = message & 1; message /= 2; if (type == state) return 4; if (state != 0) return bit + 2; return bit; } ii longest_path(vi S) { const int N = sz(S); int U = 0, V = 0; dforsn(i, N - 28, N - 14) U = (U << 1) + (S[i] % 2); dforsn(i, N - 14, N) V = (V << 1) + (S[i] % 2); forsn(i, N - 28, N - 14) { if (S[i] == 4) U = i; else if (S[i] >= 2) V = i; } forsn(i, N - 14, N) { if (S[i] == 4) V = i; else if (S[i] >= 2) U = i; } return {U, V}; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...