Submission #1009435

#TimeUsernameProblemLanguageResultExecution timeMemory
1009435hmm789City (JOI17_city)C++14
100 / 100
250 ms53444 KiB
#include "Encoder.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
 
vector<int> adj[500000];
int pre[500000], len[500000], pw[300], cur;
const double r = 1.05;
 
void dfs(int x, int p) {
    pre[x] = cur++;
    for(int i : adj[x]) if(i != p) dfs(i, x);
    int sz = cur-pre[x]+1;
    len[x] = lower_bound(pw, pw+300, sz)-pw;
    cur += pw[len[x]] - sz;
}
 
#undef int
void Encode(int N, int A[], int B[]) {
#define int long long
    double num = 1;
    pw[0] = 1;
    for(int i = 1; i < 300; i++) {
        num *= r;
        pw[i] = (int)ceil(num);
    }
    for(int i = 0; i < N-1; i++) {
        adj[A[i]].push_back(B[i]);
        adj[B[i]].push_back(A[i]);
    }
    dfs(0, -1);
    for(int i = 0; i < N; i++) Code(i, len[i]+300*pre[i]);
#undef int
}
#include "Device.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long 
 
int pw[300];
const double r = 1.05;
 
void InitDevice() {
	double num = 1;
    pw[0] = 1;
    for(int i = 1; i < 300; i++) {
        num *= r;
        pw[i] = (int)ceil(num);
    }
}
 
#undef int
int Answer(long long S, long long T) {
#define int long long
    int pres = S/300, posts = pres+pw[S%300]-1;
    int pret = T/300, postt = pret+pw[T%300]-1;
    if(pres < pret && posts >= postt) return 1;
    if(pret < pres && postt >= posts) return 0;
    return 2;
#undef int
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...