Submission #414820

# Submission time Handle Problem Language Result Execution time Memory
414820 2021-05-31T08:33:09 Z amoo_safar City (JOI17_city) C++17
99 / 100
561 ms 42336 KB
#include "Encoder.h"
#include <bits/stdc++.h>

using namespace std;


const int N = 30e4;
const int bl = 125;
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 = true;
	bool lf = true;
	for(auto adj : G[u]) if(adj != p) lf = false;
	for(auto adj : G[u])
		if((adj != p) && ((int) G[adj].size() > 1))
			fl = false;
	if((fl) && (!lf)){
		for(auto adj : G[u]){
			if(adj != p){
				st[adj] = T;
				fn[adj] = T + 1;
			}
		}
		T ++;
	} else {
		for(auto adj : G[u])
			if(adj != p)
				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 = 125;
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:51:6: warning: unused variable 'cnt' [-Wunused-variable]
   51 |  int cnt = 0;
      |      ^~~
# Verdict Execution time Memory Grader output
1 Correct 20 ms 8856 KB Output is correct
2 Correct 20 ms 8856 KB Output is correct
3 Correct 22 ms 8844 KB Output is correct
4 Correct 22 ms 8932 KB Output is correct
5 Correct 23 ms 8856 KB Output is correct
6 Correct 22 ms 8880 KB Output is correct
7 Correct 20 ms 8952 KB Output is correct
8 Correct 20 ms 8864 KB Output is correct
9 Correct 22 ms 8924 KB Output is correct
10 Correct 20 ms 8928 KB Output is correct
11 Correct 20 ms 8948 KB Output is correct
12 Correct 22 ms 8856 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 228 ms 17308 KB Output is correct - L = 670720
2 Correct 234 ms 17300 KB Output is correct - L = 698368
3 Correct 249 ms 17344 KB Output is correct - L = 679936
4 Correct 238 ms 17404 KB Output is correct - L = 538624
5 Correct 548 ms 41468 KB Output is correct - L = 252696576
6 Correct 515 ms 41424 KB Output is correct - L = 251441152
7 Correct 535 ms 41448 KB Output is correct - L = 252561408
8 Correct 555 ms 41140 KB Output is correct - L = 205046784
9 Correct 442 ms 42088 KB Output is correct - L = 24913920
10 Correct 468 ms 42132 KB Output is correct - L = 2469888
11 Correct 461 ms 42272 KB Output is correct - L = 270336
12 Correct 436 ms 42336 KB Output is correct - L = 47104
13 Correct 519 ms 41808 KB Output is correct - L = 125833216
14 Correct 483 ms 41588 KB Output is correct - L = 194237440
15 Correct 244 ms 17448 KB Output is correct - L = 660480
16 Correct 224 ms 17388 KB Output is correct - L = 697344
17 Correct 228 ms 17388 KB Output is correct - L = 680960
18 Partially correct 466 ms 41604 KB Output is partially correct - L = 286106624
19 Correct 518 ms 41540 KB Output is correct - L = 262154240
20 Correct 493 ms 41704 KB Output is correct - L = 255879168
21 Correct 476 ms 41776 KB Output is correct - L = 204439552
22 Correct 538 ms 41732 KB Output is correct - L = 253914112
23 Correct 513 ms 41448 KB Output is correct - L = 254605312
24 Correct 485 ms 41640 KB Output is correct - L = 256271360
25 Correct 561 ms 41460 KB Output is correct - L = 256264192
26 Correct 558 ms 41424 KB Output is correct - L = 257445888
27 Correct 510 ms 41392 KB Output is correct - L = 264805376