Submission #563942

# Submission time Handle Problem Language Result Execution time Memory
563942 2022-05-18T09:54:45 Z blue City (JOI17_city) C++17
8 / 100
420 ms 48308 KB
#include "Encoder.h"
#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;

	namespace{
using vi = vector<int>;
using vvi = vector<vi>;
#define sz(x) int(x.size())


const int mx = 250'000;
using ll = long long;
using vll = vector<ll>;

int N;
vi edge[mx];

vll code(mx, 0);

vll dfsind(mx, 0);
vll subtree(mx, 1);
vll fakesubtree(mx, 1);

int ct = -1;







vll getsizes()
{
	double base = 1.0001;
	set<ll> res;

	double curr = 1;
	while(curr <= mx)
	{
		curr *= base;
		res.insert(curr);
	}

	vll resvec;
	for(ll k : res)
		resvec.push_back(k);

	return resvec;
}


vll sizes;



void dfs(int u, int p)
{
	// cerr << "dfs " << u << '\n';
	dfsind[u] = ++ct;
	for(int v : edge[u])
	{
		if(v == p) continue;
		dfs(v, u);
		subtree[u] += subtree[v];
	}
	auto z = lower_bound(sizes.begin(), sizes.end(), (ll) subtree[u]);
	subtree[u] = *z;
	fakesubtree[u] = z - sizes.begin();
}







	}


void Encode(int N_, int A[], int B[])
{
	N = N_;
	sizes = getsizes();

	cerr << sz(sizes) << '\n';

	// for(int z : sizes)
	// 	cerr << z << ' ';
	// cerr << '\n';



	for(int e = 0; e < N-1; e++)
	{
		edge[A[e]].push_back(B[e]);
		edge[B[e]].push_back(A[e]);
	}

	// cerr << "done\n";

	dfs(0, -1);


	// cerr << "done2\n";

	for(int i = 0; i < N; i++)
	{
		// cerr << i << " : " << dfsind[i] << ' ' << subtree[i] << ' ' << ((dfsind[i]<<18) | subtree[i]) << '\n';
		Code(i, (fakesubtree[i] << 18) | dfsind[i]);
	}
}
#include "Device.h"
#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;

namespace
{
	using vi = vector<int>;
	using vvi = vector<vi>;
	using ll = long long;
	using vll = vector<ll>;
	#define sz(x) int(x.size())

	const int mx = 250'000;

	vll getsizes()
	{
		double base = 1.0001;
		set<ll> res;

		double curr = 1;
		while(curr <= mx)
		{
			curr *= base;
			res.insert(curr);
		}

		vll resvec;
		for(ll k : res)
			resvec.push_back(k);

		return resvec;
	}


	vll sizes;

}

void InitDevice()
{
	sizes = getsizes();
}

int Answer(long long S, long long T)
{
	ll s_st = sizes[S>>18];
	ll s_ind = S & ((1<<18) - 1);

	ll t_st = sizes[T>>18];
	ll t_ind = T & ((1<<18) - 1);

	// cerr << S << ' ' << T << " : " << s_ind << ' ' << s_st << " | " << t_ind << ' ' << t_st << "\n";

	if(t_ind <= s_ind && s_ind + s_st <= t_ind + t_st)
		return 0;
	else if(s_ind <= t_ind && t_ind + t_st <= s_ind + s_st)
		return 1;
	else
		return 2;
}
# Verdict Execution time Memory Grader output
1 Correct 27 ms 19628 KB Output is correct
2 Correct 28 ms 19528 KB Output is correct
3 Correct 27 ms 19624 KB Output is correct
4 Correct 26 ms 19620 KB Output is correct
5 Correct 27 ms 19632 KB Output is correct
6 Correct 27 ms 19600 KB Output is correct
7 Correct 26 ms 19616 KB Output is correct
8 Correct 26 ms 19628 KB Output is correct
9 Correct 26 ms 19612 KB Output is correct
10 Correct 26 ms 19636 KB Output is correct
11 Correct 30 ms 19884 KB Output is correct
12 Correct 31 ms 19756 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 185 ms 27956 KB Output is correct - L = 183238656
2 Correct 199 ms 28020 KB Output is correct - L = 182976512
3 Correct 185 ms 27980 KB Output is correct - L = 183238656
4 Correct 187 ms 27880 KB Output is correct - L = 183238656
5 Incorrect 420 ms 48308 KB Wrong Answer [6]
6 Halted 0 ms 0 KB -