Submission #414823

# Submission time Handle Problem Language Result Execution time Memory
414823 2021-05-31T08:35:26 Z amoo_safar City (JOI17_city) C++17
99 / 100
558 ms 42152 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 = 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 = 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:51:6: warning: unused variable 'cnt' [-Wunused-variable]
   51 |  int cnt = 0;
      |      ^~~
# Verdict Execution time Memory Grader output
1 Correct 19 ms 8832 KB Output is correct
2 Correct 20 ms 8948 KB Output is correct
3 Correct 20 ms 8840 KB Output is correct
4 Correct 19 ms 8828 KB Output is correct
5 Correct 20 ms 8832 KB Output is correct
6 Correct 20 ms 8808 KB Output is correct
7 Correct 20 ms 8856 KB Output is correct
8 Correct 20 ms 8832 KB Output is correct
9 Correct 20 ms 8868 KB Output is correct
10 Correct 19 ms 8844 KB Output is correct
11 Correct 20 ms 8832 KB Output is correct
12 Correct 20 ms 8868 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 220 ms 17388 KB Output is correct - L = 649760
2 Correct 237 ms 17396 KB Output is correct - L = 676544
3 Correct 249 ms 17436 KB Output is correct - L = 658688
4 Correct 213 ms 17404 KB Output is correct - L = 521792
5 Correct 498 ms 41356 KB Output is correct - L = 244915872
6 Correct 556 ms 41796 KB Output is correct - L = 243583616
7 Correct 516 ms 41476 KB Output is correct - L = 244808736
8 Correct 508 ms 41056 KB Output is correct - L = 198728352
9 Correct 464 ms 42152 KB Output is correct - L = 24135360
10 Correct 424 ms 42140 KB Output is correct - L = 2392704
11 Correct 413 ms 42084 KB Output is correct - L = 261888
12 Correct 495 ms 42060 KB Output is correct - L = 45632
13 Correct 475 ms 41720 KB Output is correct - L = 121907872
14 Correct 494 ms 41552 KB Output is correct - L = 188363936
15 Correct 224 ms 17420 KB Output is correct - L = 664640
16 Correct 213 ms 17268 KB Output is correct - L = 675552
17 Correct 219 ms 17488 KB Output is correct - L = 659680
18 Partially correct 545 ms 41556 KB Output is partially correct - L = 280950272
19 Correct 468 ms 41580 KB Output is correct - L = 257515264
20 Correct 475 ms 41664 KB Output is correct - L = 247882944
21 Correct 517 ms 41540 KB Output is correct - L = 198050816
22 Correct 464 ms 41572 KB Output is correct - L = 245979296
23 Correct 493 ms 41556 KB Output is correct - L = 246648896
24 Correct 469 ms 41528 KB Output is correct - L = 248262880
25 Correct 494 ms 41468 KB Output is correct - L = 248255936
26 Correct 507 ms 41452 KB Output is correct - L = 253001664
27 Correct 558 ms 41332 KB Output is correct - L = 256530208