제출 #1005457

#제출 시각아이디문제언어결과실행 시간메모리
100545779brueCity (JOI17_city)C++17
100 / 100
225 ms55652 KiB
#include "Encoder.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; namespace{ const int M = 300; int n; ll len[512] = {0}; void init(){ for(int i=1; i<=M; i++){ len[i] = round(double(len[i-1]) * 1.05); if(len[i] == len[i-1]) len[i]++; } } vector<int> link[250005]; ll in[250005], out[250002], inCnt=0, t[250002]; void dfs(int x, int p=-1){ in[x] = ++inCnt; for(int y: link[x]){ if(y==p) continue; dfs(y, x); } t[x] = lower_bound(len, len+M+1, inCnt - in[x]) - len; inCnt = out[x] = in[x] + len[t[x]]; } void encode(int N, int A[], int B[]){ init(); n = N; for(int i=0; i<n-1; i++) link[A[i]].push_back(B[i]), link[B[i]].push_back(A[i]); dfs(0); for(int i=0; i<n; i++){ // assert(in[i] < (1<<19)); // assert(out[i] - in[i] < len[255]); Code(i, in[i] << 8 | t[i]); } } } void Encode(int N, int A[], int B[]){ encode(N, A, B); }
#include "Device.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; namespace{ const int M = 300; ll len[512] = {0}; void init(){ for(int i=1; i<=M; i++){ len[i] = round(double(len[i-1]) * 1.05); if(len[i] == len[i-1]) len[i]++; } } } void InitDevice(){ init(); } int Answer(ll S, ll T){ ll SL = S >> 8, SR = SL + len[S & 255]; ll TL = T >> 8, TR = TL + len[T & 255]; if(SL<=TL&&TR<=SR) return 1; if(TL<=SL&&SR<=TR) return 0; return 2; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...