Submission #414830

# Submission time Handle Problem Language Result Execution time Memory
414830 2021-05-31T08:42:36 Z amoo_safar City (JOI17_city) C++17
99 / 100
608 ms 42148 KB
#include "Encoder.h"
#include <bits/stdc++.h>

using namespace std;


const int N = 30e4;
const int bl = 120;
const int sd = 58;

int mk[N];
mt19937 rng(sd);
vector<int> V;

vector<int> G[N];
int st[N], fn[N], T = 0;

void DFS(int u, int p){
	st[u] = T ++;
	shuffle(G[u].begin(), G[u].end(), rng);
	bool fl = false;
	for(auto adj : G[u])
		if((adj != p) && ((int) G[adj].size() == 1))
			fl = true;
	if(fl){
		for(auto adj : G[u]){
			if(adj != p && G[adj].size() == 1){
				st[adj] = T;
				fn[adj] = T + 1;
			}
		}
		T ++;
	} 
	for(auto adj : G[u])
		if(adj != p && G[adj].size() > 1)
			DFS(adj, u);
	fn[u] = T;

	while(mk[fn[u] - st[u] ] == -1){
		fn[u] ++;
		T ++;
	}
	// cerr << "!! " << u << ' ' << st[u] << ' ' << fn[u] << '\n'; 
}

void Encode(int _n, int A[], int B[]){
	memset(mk, -1, sizeof mk);
	int cnt = 0;

	for(int i = 1; i < N; i++){
		int pr = (i + bl - 1) / bl;
		// if(i > N / 2) pr += pr;
		uniform_int_distribution<> Amoo(1, pr);
		if(Amoo(rng) == 1){
			mk[i] = V.size();
			V.push_back(i);
		}
	}
	int sz = V.size();
	for(int i = 0; i < _n - 1; i++)
		G[A[i]].push_back(B[i]), G[B[i]].push_back(A[i]);
	T = 0;
	DFS(0, -1);
	cerr << "! " << V.size() << '\n';
	// for(int i = 0; i < _n; i++)
	// 	cerr << "! " << st[i] << ' ' << fn[i] << '\n';
	
	for(int i = 0; i < _n; i++){
		Code(i, 1ll * sz * st[i] + mk[fn[i] - st[i]]);
	}
}
#include "Device.h"

#include <bits/stdc++.h>

using namespace std;

const int N = 30e4;
const int bl = 120;
const int sd = 58;

mt19937 rng2(sd);
vector<int> V2;

void InitDevice(){
	for(int i = 1; i < N; i++){
		int pr = (i + bl - 1) / bl;
		uniform_int_distribution<> Amoo(1, pr);

		if(Amoo(rng2) == 1)
			V2.push_back(i);
	}
}

int Answer(long long S, long long T){
	if(S == T)
		return 2;
	int sz = V2.size();
	int s1 = S / sz, f1 = s1 + V2[S % sz];
	int s2 = T / sz, f2 = s2 + V2[T % sz];

	if(s2 <= s1 && s1 < f2) return 0;
	if(s1 <= s2 && s2 < f1) return 1;
	return 2;
}

Compilation message

Encoder.cpp: In function 'void Encode(int, int*, int*)':
Encoder.cpp:48:6: warning: unused variable 'cnt' [-Wunused-variable]
   48 |  int cnt = 0;
      |      ^~~
# Verdict Execution time Memory Grader output
1 Correct 20 ms 8808 KB Output is correct
2 Correct 22 ms 8808 KB Output is correct
3 Correct 20 ms 8856 KB Output is correct
4 Correct 19 ms 8832 KB Output is correct
5 Correct 19 ms 8936 KB Output is correct
6 Correct 20 ms 8892 KB Output is correct
7 Correct 20 ms 8836 KB Output is correct
8 Correct 22 ms 8828 KB Output is correct
9 Correct 20 ms 8832 KB Output is correct
10 Correct 20 ms 8808 KB Output is correct
11 Correct 20 ms 8852 KB Output is correct
12 Correct 22 ms 8964 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 211 ms 17384 KB Output is correct - L = 603136
2 Correct 227 ms 17340 KB Output is correct - L = 630912
3 Correct 218 ms 17328 KB Output is correct - L = 595200
4 Correct 232 ms 17292 KB Output is correct - L = 521792
5 Correct 498 ms 41428 KB Output is correct - L = 225898240
6 Correct 529 ms 41380 KB Output is correct - L = 225138368
7 Correct 608 ms 41424 KB Output is correct - L = 225197888
8 Correct 554 ms 41212 KB Output is correct - L = 198728352
9 Correct 413 ms 42052 KB Output is correct - L = 22615616
10 Correct 425 ms 42056 KB Output is correct - L = 2152640
11 Correct 507 ms 42148 KB Output is correct - L = 250976
12 Correct 423 ms 42048 KB Output is correct - L = 41664
13 Correct 490 ms 41792 KB Output is correct - L = 111572224
14 Correct 521 ms 41576 KB Output is correct - L = 176427200
15 Correct 222 ms 17440 KB Output is correct - L = 596192
16 Correct 215 ms 17320 KB Output is correct - L = 618016
17 Correct 208 ms 17296 KB Output is correct - L = 607104
18 Partially correct 485 ms 41600 KB Output is partially correct - L = 277168768
19 Correct 478 ms 41564 KB Output is correct - L = 246753056
20 Correct 475 ms 41596 KB Output is correct - L = 247882944
21 Correct 459 ms 41576 KB Output is correct - L = 197840512
22 Correct 482 ms 41704 KB Output is correct - L = 245979296
23 Correct 470 ms 41660 KB Output is correct - L = 246648896
24 Correct 529 ms 41464 KB Output is correct - L = 248262880
25 Correct 561 ms 41548 KB Output is correct - L = 248255936
26 Correct 512 ms 41540 KB Output is correct - L = 253001664
27 Correct 509 ms 41260 KB Output is correct - L = 256530208