Submission #108541

# Submission time Handle Problem Language Result Execution time Memory
108541 2019-04-30T06:59:39 Z E869120 Amusement Park (JOI17_amusement_park) C++14
100 / 100
1114 ms 4256 KB
#include "Joi.h"
#include <iostream>
#include <vector>
using namespace std;

vector<int>G[10009]; int col[10009], v[20009], cnts;

void make_ransuu1(int B) {
	for (int i = 0; i < B; i++) v[i] = i;

	unsigned long long x = 2700;
	for (int i = 0; i < 1000000; i++) {
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		int u1 = (x % B);
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		int u2 = (x % B);
		swap(v[u1], v[u2]);
	}
}

void dfs(int pos) {
	if (col[pos] >= 0) return;
	col[pos] = cnts % 60; cnts++;
	for (int i = 0; i < G[pos].size(); i++) dfs(G[pos][i]);
}

void Joi(int N, int M, int A[], int B[], long long X, int T) {
	make_ransuu1(M);
	for (int i = 0; i < M; i++) { G[A[v[i]]].push_back(B[v[i]]); G[B[v[i]]].push_back(A[v[i]]); }
	for (int i = 0; i < N; i++) col[i] = -1;
	dfs(0);
	for (int i = 0; i < N; i++) MessageBoard(i, (X / (1LL << col[i])) % 2);
}
#include "Ioi.h"
#include <vector>
#include <queue>
#include <algorithm>
#include <ctime>
using namespace std;

vector<int>I[10009]; int dist[10009], par[10009], cols[10009], vv[20009], cntv;
int N, M; bool used[60];

void make_ransuu2(int B) {
	for (int i = 0; i < B; i++) vv[i] = i;

	unsigned long long x = 2700;
	for (int i = 0; i < 1000000; i++) {
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		int u1 = (x % B);
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		int u2 = (x % B);
		swap(vv[u1], vv[u2]);
	}
}


void dfs2(int pos) {
	if (cols[pos] >= 0) return;
	cols[pos] = cntv % 60; cntv++;
	for (int i = 0; i < I[pos].size(); i++) dfs2(I[pos][i]);
}

vector<int> nearest(int sta, int rem) {
	for (int i = 0; i < N; i++) dist[i] = (1 << 30);
	
	queue<int>Q; Q.push(sta); dist[sta] = 0;
	while (!Q.empty()) {
		int pos = Q.front(); Q.pop();
		for (int i = 0; i < I[pos].size(); i++) {
			int to = I[pos][i];
			if (dist[to] > dist[pos] + 1) {
				dist[to] = dist[pos] + 1;
				par[to] = pos;
				Q.push(to);
			}
		}
	}

	int id = 0, minx = 10000;
	for (int i = 0; i < N; i++) {
		if (cols[i] == rem && dist[i] < minx) {
			minx = dist[i]; id = i;
		}
	}

	vector<int>U;
	while (true) {
		U.push_back(id); if (id == sta) break;
		id = par[id];
	}
	reverse(U.begin(), U.end());
	return U;
}

long long Ioi(int NN, int MM, int A[], int B[], int P, int V, int T) {
	srand((unsigned)time(NULL));
	N = NN; M = MM; make_ransuu2(M);
	for (int i = 0; i < M; i++) { I[A[vv[i]]].push_back(B[vv[i]]); I[B[vv[i]]].push_back(A[vv[i]]); }
	for (int i = 0; i < N; i++) cols[i] = -1;
	dfs2(0);
	
	int cx = P; long long rem = 0, cntv = 0;
	for (int i = 0; i < 60; i++) {
		vector<int>E; int id = -1;
		for (int j = 0; j < 60; j++) {
			if (used[j] == true) continue;
			vector<int>F = nearest(cx, j);
			if (E.size() == 0 || E.size() > F.size()) { E = F; id = j; }
		}
		if (cntv + (E.size() - 1) > 120 && T == 5) {
			if (rand() % 2 == 0) rem += (1LL << id);
		}
		else {
			int F = V;
			for (int j = 1; j < E.size(); j++) {
				F = Move(E[j]);
			}
			rem += 1LL * F * (1LL << id);
			if (E.size() >= 1) cx = E[E.size() - 1];
			cntv += (E.size() - 1);
		}
		used[id] = true;
	}
	return rem;
}

Compilation message

Joi.cpp: In function 'void dfs(int)':
Joi.cpp:28:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < G[pos].size(); i++) dfs(G[pos][i]);
                  ~~^~~~~~~~~~~~~~~

Ioi.cpp: In function 'void dfs2(int)':
Ioi.cpp:32:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < I[pos].size(); i++) dfs2(I[pos][i]);
                  ~~^~~~~~~~~~~~~~~
Ioi.cpp: In function 'std::vector<int> nearest(int, int)':
Ioi.cpp:41:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < I[pos].size(); i++) {
                   ~~^~~~~~~~~~~~~~~
Ioi.cpp: In function 'long long int Ioi(int, int, int*, int*, int, int, int)':
Ioi.cpp:87:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 1; j < E.size(); j++) {
                    ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 48 ms 1328 KB Output is correct
2 Correct 57 ms 1272 KB Output is correct
3 Correct 57 ms 1348 KB Output is correct
4 Correct 51 ms 1416 KB Output is correct
5 Correct 52 ms 1212 KB Output is correct
6 Correct 50 ms 1144 KB Output is correct
7 Correct 52 ms 1400 KB Output is correct
8 Correct 51 ms 1420 KB Output is correct
9 Correct 59 ms 1368 KB Output is correct
10 Correct 49 ms 1248 KB Output is correct
11 Correct 82 ms 1604 KB Output is correct
12 Correct 50 ms 1288 KB Output is correct
13 Correct 66 ms 1372 KB Output is correct
14 Correct 60 ms 1376 KB Output is correct
15 Correct 54 ms 1276 KB Output is correct
16 Correct 55 ms 1420 KB Output is correct
17 Correct 57 ms 1448 KB Output is correct
18 Correct 52 ms 1248 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 965 ms 4256 KB Output is correct
2 Correct 928 ms 4164 KB Output is correct
3 Correct 1014 ms 4108 KB Output is correct
4 Correct 751 ms 2940 KB Output is correct
5 Correct 968 ms 3220 KB Output is correct
6 Correct 927 ms 2976 KB Output is correct
7 Correct 813 ms 3148 KB Output is correct
8 Correct 823 ms 3100 KB Output is correct
9 Correct 828 ms 3112 KB Output is correct
10 Correct 401 ms 2952 KB Output is correct
11 Correct 416 ms 2968 KB Output is correct
12 Correct 550 ms 2848 KB Output is correct
13 Correct 493 ms 2672 KB Output is correct
14 Correct 575 ms 2744 KB Output is correct
15 Correct 700 ms 2860 KB Output is correct
16 Correct 754 ms 2864 KB Output is correct
17 Correct 888 ms 2808 KB Output is correct
18 Correct 817 ms 2936 KB Output is correct
19 Correct 774 ms 3108 KB Output is correct
20 Correct 533 ms 3216 KB Output is correct
21 Correct 487 ms 3252 KB Output is correct
22 Correct 624 ms 3128 KB Output is correct
23 Correct 654 ms 3072 KB Output is correct
24 Correct 571 ms 3036 KB Output is correct
25 Correct 677 ms 3084 KB Output is correct
26 Correct 670 ms 3212 KB Output is correct
27 Correct 706 ms 3200 KB Output is correct
28 Correct 651 ms 3080 KB Output is correct
29 Correct 542 ms 2996 KB Output is correct
30 Correct 564 ms 2992 KB Output is correct
31 Correct 47 ms 1152 KB Output is correct
32 Correct 53 ms 1280 KB Output is correct
33 Correct 60 ms 1292 KB Output is correct
34 Correct 47 ms 1152 KB Output is correct
35 Correct 46 ms 1248 KB Output is correct
36 Correct 47 ms 1288 KB Output is correct
37 Correct 48 ms 1152 KB Output is correct
38 Correct 50 ms 1152 KB Output is correct
39 Correct 48 ms 1152 KB Output is correct
40 Correct 52 ms 1240 KB Output is correct
41 Correct 57 ms 1260 KB Output is correct
42 Correct 44 ms 1144 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 45 ms 1272 KB Output is correct
2 Correct 45 ms 1264 KB Output is correct
3 Correct 47 ms 1236 KB Output is correct
4 Correct 113 ms 1548 KB Output is correct
5 Correct 89 ms 1816 KB Output is correct
6 Correct 100 ms 1556 KB Output is correct
7 Correct 105 ms 1548 KB Output is correct
8 Correct 100 ms 1572 KB Output is correct
9 Correct 496 ms 3508 KB Output is correct
10 Correct 616 ms 3512 KB Output is correct
11 Correct 660 ms 3528 KB Output is correct
12 Correct 47 ms 1152 KB Output is correct
13 Correct 48 ms 1288 KB Output is correct
14 Correct 77 ms 1152 KB Output is correct
15 Correct 46 ms 1152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 942 ms 4192 KB Output is correct
2 Correct 937 ms 4044 KB Output is correct
3 Correct 1004 ms 4184 KB Output is correct
4 Correct 665 ms 2992 KB Output is correct
5 Correct 917 ms 3328 KB Output is correct
6 Correct 819 ms 3164 KB Output is correct
7 Correct 872 ms 3108 KB Output is correct
8 Correct 737 ms 3116 KB Output is correct
9 Correct 770 ms 3076 KB Output is correct
10 Correct 463 ms 2972 KB Output is correct
11 Correct 426 ms 2972 KB Output is correct
12 Correct 487 ms 2932 KB Output is correct
13 Correct 465 ms 2720 KB Output is correct
14 Correct 520 ms 2748 KB Output is correct
15 Correct 607 ms 2960 KB Output is correct
16 Correct 598 ms 2900 KB Output is correct
17 Correct 770 ms 3068 KB Output is correct
18 Correct 643 ms 2864 KB Output is correct
19 Correct 673 ms 2776 KB Output is correct
20 Correct 423 ms 3252 KB Output is correct
21 Correct 492 ms 3028 KB Output is correct
22 Correct 609 ms 3080 KB Output is correct
23 Correct 632 ms 3076 KB Output is correct
24 Correct 595 ms 3036 KB Output is correct
25 Correct 629 ms 3104 KB Output is correct
26 Correct 624 ms 3168 KB Output is correct
27 Correct 573 ms 3248 KB Output is correct
28 Correct 532 ms 3068 KB Output is correct
29 Correct 507 ms 3012 KB Output is correct
30 Correct 616 ms 3060 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1059 ms 4104 KB Output is correct
2 Correct 1114 ms 4140 KB Output is correct
3 Correct 1107 ms 4136 KB Output is correct
4 Correct 753 ms 2868 KB Output is correct
5 Correct 962 ms 3276 KB Output is correct
6 Correct 838 ms 3120 KB Output is correct
7 Correct 810 ms 3060 KB Output is correct
8 Correct 870 ms 3100 KB Output is correct
9 Correct 798 ms 3124 KB Output is correct
10 Correct 433 ms 3056 KB Output is correct
11 Correct 455 ms 3052 KB Output is correct
12 Correct 483 ms 2712 KB Output is correct
13 Correct 475 ms 2852 KB Output is correct
14 Correct 492 ms 2792 KB Output is correct
15 Correct 660 ms 2944 KB Output is correct
16 Correct 665 ms 2952 KB Output is correct
17 Correct 751 ms 2932 KB Output is correct
18 Correct 746 ms 2948 KB Output is correct
19 Correct 751 ms 2880 KB Output is correct
20 Correct 474 ms 3300 KB Output is correct
21 Correct 492 ms 3200 KB Output is correct
22 Correct 587 ms 3156 KB Output is correct
23 Correct 562 ms 2980 KB Output is correct
24 Correct 552 ms 3068 KB Output is correct
25 Correct 633 ms 3204 KB Output is correct
26 Correct 629 ms 2992 KB Output is correct
27 Correct 603 ms 3160 KB Output is correct
28 Correct 544 ms 3176 KB Output is correct
29 Correct 572 ms 2976 KB Output is correct
30 Correct 569 ms 3052 KB Output is correct
31 Correct 50 ms 1272 KB Output is correct
32 Correct 50 ms 1152 KB Output is correct
33 Correct 52 ms 1400 KB Output is correct
34 Correct 46 ms 1544 KB Output is correct
35 Correct 46 ms 1260 KB Output is correct
36 Correct 44 ms 1152 KB Output is correct
37 Correct 48 ms 1208 KB Output is correct
38 Correct 53 ms 1236 KB Output is correct
39 Correct 51 ms 1420 KB Output is correct
40 Correct 48 ms 1288 KB Output is correct
41 Correct 62 ms 1244 KB Output is correct
42 Correct 44 ms 1152 KB Output is correct