Submission #1257643

#TimeUsernameProblemLanguageResultExecution timeMemory
1257643makravCity (JOI17_city)C++20
100 / 100
332 ms20924 KiB
#include "Encoder.h" #include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int) (x).size() void Encode(int N, int A[], int B[]) { vector<vector<int>> g(N); for (int i = 0; i < N - 1; i++) { g[A[i]].pb(B[i]); g[B[i]].pb(A[i]); } vector<int> rnd_ups(1 << 8); rnd_ups[0] = 1; for (int i = 1; i < 1 << 8; i++) { rnd_ups[i] = max(rnd_ups[i - 1] + 1, int(rnd_ups[i - 1] * 1.05)); } vector<int> tin(N), X(N); int T = 0; auto dfs = [&](int v, int p, auto&&self) -> void { tin[v] = T++; for (int u : g[v]) { if (u != p) { self(u, v, self); } } int L = -1, R = sz(rnd_ups); while (R - L > 1) { int M = (L + R) / 2; if (rnd_ups[M] < T - tin[v]) L = M; else R = M; } T = tin[v] + rnd_ups[R]; X[v] = R; }; dfs(0, 0, dfs); for (int i = 0; i < N; i++) Code(i, (tin[i] << 8) | X[i]); }
#include "Device.h" #include <cassert> #include <bits/stdc++.h> using namespace std; using ll = long long; vector<int> rnd_ups(1 << 8); void InitDevice() { rnd_ups[0] = 1; for (int i = 1; i < 1 << 8; i++) { rnd_ups[i] = max(rnd_ups[i - 1] + 1, int(rnd_ups[i - 1] * 1.05)); } } int Answer(long long S, long long T) { if (S == T) return 2; ll tin1 = S / (1 << 8), tin2 = T / (1 << 8), tout1 = tin1 + rnd_ups[S % (1 << 8)], tout2 = tin2 + rnd_ups[T % (1 << 8)]; if (tin1 <= tin2 && tout2 <= tout1) return 1; if (tin2 <= tin1 && tout1 <= tout2) return 0; return 2; // if ((S&T) != std::min(S, T)) return 2; // if (H1 < H2) return 1; // return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...