Submission #1164265

#TimeUsernameProblemLanguageResultExecution timeMemory
1164265OI_AccountCity (JOI17_city)C++20
8 / 100
91 ms9796 KiB
#include "Encoder.h" #include <bits/stdc++.h> using namespace std; const int N = 250'000; const int T1 = 20; const int T2 = 10; static int n, ans[N + 10], len[N + 10]; static int k, x[N + 10], sum[N + 10]; static vector<int> adj[N + 10]; void calcX() { for (int i = 1; i <= 30; i++) x[i] = i; k = 30; while (x[k] < (1 << T1)) { x[k + 1] = (x[k] * 27) / 26; k++; } } void dfsLen(int u = 1, int par = 0) { int t = 1; for (auto v: adj[u]) if (v != par) { dfsLen(v, u); sum[v] += t; t += x[len[v]]; } len[u] = lower_bound(x + 1, x + k + 1, t) - x; } void dfsAns(int u = 1, int par = 0, int up = 0) { up += sum[u]; ans[u] = up + 1; for (auto v: adj[u]) if (v != par) dfsAns(v, u, up); } void writeOutput() { for (int i = 1; i <= n; i++) { //cout << i - 1 << ": " << ans[i] << ' ' << ans[i] + x[len[i]] - 1 << endl; ans[i] = (ans[i] << T2) + x[len[i]]; Code(i - 1, ans[i]); } } void Encode(int N, int A[], int B[]) { n = N; for (int i = 0; i < n - 1; i++) { int u = A[i] + 1, v = B[i] + 1; adj[u].push_back(v); adj[v].push_back(u); } calcX(); dfsLen(); dfsAns(); writeOutput(); }
#include "Device.h" #include <bits/stdc++.h> using namespace std; const int N = 1000; const int T1 = 20; const int T2 = 10; static int k, x[N + 10]; static void calcX() { for (int i = 1; i <= 30; i++) x[i] = i; k = 30; while (x[k] < (1 << T1)) { x[k + 1] = (x[k] * 27) / 26; k++; } } void InitDevice() { calcX(); } pair<int, int> calcP(long long t) { int lenX = x[t & ((1 << T2) - 1)]; int st = (t >> T2); return {st, st + lenX - 1}; } bool inSub(pair<int, int> u, pair<int, int> v) { return u.first <= v.first && v.second <= u.second; } int Answer(long long S, long long T) { pair<int, int> x = calcP(S); pair<int, int> y = calcP(T); if (inSub(y, x)) return 0; return inSub(x, y)? 1: 2; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...