답안 #108527

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
108527 2019-04-30T06:41:53 Z E869120 Amusement Park (JOI17_amusement_park) C++14
82 / 100
1119 ms 4392 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 = 514;
	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>
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 = 514;
	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) {
	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;
	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; }
		}
		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];
		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:31: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:40: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:81:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 1; j < E.size(); j++) {
                   ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 1152 KB Output is correct
2 Correct 56 ms 1268 KB Output is correct
3 Correct 46 ms 1380 KB Output is correct
4 Correct 60 ms 1288 KB Output is correct
5 Correct 53 ms 1236 KB Output is correct
6 Correct 61 ms 1408 KB Output is correct
7 Correct 72 ms 1380 KB Output is correct
8 Correct 54 ms 1292 KB Output is correct
9 Correct 55 ms 1368 KB Output is correct
10 Correct 44 ms 1256 KB Output is correct
11 Correct 66 ms 1536 KB Output is correct
12 Correct 47 ms 1336 KB Output is correct
13 Correct 51 ms 1336 KB Output is correct
14 Correct 50 ms 1412 KB Output is correct
15 Correct 57 ms 1420 KB Output is correct
16 Correct 48 ms 1316 KB Output is correct
17 Correct 49 ms 1372 KB Output is correct
18 Correct 53 ms 1276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1119 ms 4052 KB Output is correct
2 Correct 1028 ms 4200 KB Output is correct
3 Correct 988 ms 4180 KB Output is correct
4 Correct 760 ms 2992 KB Output is correct
5 Correct 927 ms 3124 KB Output is correct
6 Correct 856 ms 3152 KB Output is correct
7 Correct 901 ms 3080 KB Output is correct
8 Correct 879 ms 3020 KB Output is correct
9 Correct 809 ms 2992 KB Output is correct
10 Correct 461 ms 2968 KB Output is correct
11 Correct 442 ms 3052 KB Output is correct
12 Correct 437 ms 2780 KB Output is correct
13 Correct 567 ms 2744 KB Output is correct
14 Correct 463 ms 2856 KB Output is correct
15 Correct 568 ms 2968 KB Output is correct
16 Correct 712 ms 2940 KB Output is correct
17 Correct 707 ms 2996 KB Output is correct
18 Correct 753 ms 2996 KB Output is correct
19 Correct 782 ms 2864 KB Output is correct
20 Correct 487 ms 3256 KB Output is correct
21 Correct 470 ms 3120 KB Output is correct
22 Correct 567 ms 3000 KB Output is correct
23 Correct 547 ms 3128 KB Output is correct
24 Correct 622 ms 3064 KB Output is correct
25 Correct 645 ms 2992 KB Output is correct
26 Correct 599 ms 3252 KB Output is correct
27 Correct 589 ms 3096 KB Output is correct
28 Correct 610 ms 3248 KB Output is correct
29 Correct 531 ms 3016 KB Output is correct
30 Correct 541 ms 3056 KB Output is correct
31 Correct 54 ms 1404 KB Output is correct
32 Correct 46 ms 1152 KB Output is correct
33 Correct 47 ms 1296 KB Output is correct
34 Correct 56 ms 1272 KB Output is correct
35 Correct 47 ms 1152 KB Output is correct
36 Correct 51 ms 1396 KB Output is correct
37 Correct 49 ms 1288 KB Output is correct
38 Correct 47 ms 1152 KB Output is correct
39 Correct 56 ms 1148 KB Output is correct
40 Correct 50 ms 1156 KB Output is correct
41 Correct 53 ms 1328 KB Output is correct
42 Correct 49 ms 1408 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 72 ms 1408 KB Output is correct
2 Correct 49 ms 1536 KB Output is correct
3 Correct 46 ms 1152 KB Output is correct
4 Correct 90 ms 1628 KB Output is correct
5 Correct 97 ms 1820 KB Output is correct
6 Correct 98 ms 1748 KB Output is correct
7 Correct 99 ms 1624 KB Output is correct
8 Correct 97 ms 1624 KB Output is correct
9 Correct 463 ms 3636 KB Output is correct
10 Correct 596 ms 3564 KB Output is correct
11 Correct 638 ms 3384 KB Output is correct
12 Correct 59 ms 1320 KB Output is correct
13 Correct 52 ms 1272 KB Output is correct
14 Correct 55 ms 1368 KB Output is correct
15 Correct 55 ms 1376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 980 ms 4140 KB Output is correct
2 Correct 1037 ms 4260 KB Output is correct
3 Correct 1095 ms 4392 KB Output is correct
4 Correct 648 ms 2900 KB Output is correct
5 Correct 979 ms 3308 KB Output is correct
6 Correct 776 ms 3140 KB Output is correct
7 Partially correct 812 ms 3120 KB Partially correct
8 Correct 796 ms 2952 KB Output is correct
9 Correct 800 ms 3040 KB Output is correct
10 Correct 453 ms 2964 KB Output is correct
11 Correct 405 ms 2964 KB Output is correct
12 Correct 558 ms 2720 KB Output is correct
13 Correct 463 ms 2872 KB Output is correct
14 Correct 532 ms 2736 KB Output is correct
15 Correct 663 ms 2772 KB Output is correct
16 Correct 751 ms 2880 KB Output is correct
17 Correct 710 ms 2976 KB Output is correct
18 Correct 717 ms 2860 KB Output is correct
19 Correct 812 ms 2988 KB Output is correct
20 Correct 451 ms 3168 KB Output is correct
21 Correct 442 ms 3156 KB Output is correct
22 Correct 569 ms 3084 KB Output is correct
23 Correct 563 ms 3120 KB Output is correct
24 Correct 616 ms 2984 KB Output is correct
25 Correct 597 ms 3016 KB Output is correct
26 Correct 658 ms 3120 KB Output is correct
27 Correct 635 ms 3248 KB Output is correct
28 Correct 607 ms 3064 KB Output is correct
29 Correct 564 ms 2924 KB Output is correct
30 Correct 526 ms 3060 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1105 ms 4048 KB Output is correct
2 Correct 1081 ms 4124 KB Output is correct
3 Correct 992 ms 4044 KB Output is correct
4 Correct 739 ms 2968 KB Output is correct
5 Correct 1043 ms 3256 KB Output is correct
6 Correct 793 ms 3064 KB Output is correct
7 Correct 792 ms 2956 KB Output is correct
8 Correct 839 ms 3168 KB Output is correct
9 Correct 866 ms 3084 KB Output is correct
10 Correct 469 ms 2916 KB Output is correct
11 Correct 449 ms 3088 KB Output is correct
12 Correct 448 ms 2808 KB Output is correct
13 Correct 465 ms 2796 KB Output is correct
14 Correct 542 ms 2908 KB Output is correct
15 Correct 630 ms 2960 KB Output is correct
16 Correct 603 ms 2984 KB Output is correct
17 Correct 784 ms 2992 KB Output is correct
18 Correct 694 ms 2900 KB Output is correct
19 Correct 752 ms 2996 KB Output is correct
20 Correct 534 ms 3172 KB Output is correct
21 Correct 479 ms 3220 KB Output is correct
22 Correct 585 ms 2992 KB Output is correct
23 Correct 641 ms 3008 KB Output is correct
24 Correct 645 ms 3124 KB Output is correct
25 Correct 672 ms 3120 KB Output is correct
26 Correct 584 ms 2976 KB Output is correct
27 Correct 612 ms 3224 KB Output is correct
28 Correct 628 ms 3248 KB Output is correct
29 Correct 558 ms 3052 KB Output is correct
30 Correct 665 ms 3148 KB Output is correct
31 Incorrect 55 ms 1464 KB Output isn't correct
32 Halted 0 ms 0 KB -