답안 #108519

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
108519 2019-04-30T06:38:27 Z E869120 Amusement Park (JOI17_amusement_park) C++14
82 / 100
1105 ms 4292 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 = 2585;
	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 = 2585;
	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 49 ms 1152 KB Output is correct
2 Correct 45 ms 1256 KB Output is correct
3 Correct 52 ms 1280 KB Output is correct
4 Correct 49 ms 1280 KB Output is correct
5 Correct 59 ms 1248 KB Output is correct
6 Correct 64 ms 1348 KB Output is correct
7 Correct 65 ms 1396 KB Output is correct
8 Correct 52 ms 1396 KB Output is correct
9 Correct 52 ms 1400 KB Output is correct
10 Correct 50 ms 1244 KB Output is correct
11 Correct 76 ms 1568 KB Output is correct
12 Correct 51 ms 1152 KB Output is correct
13 Correct 54 ms 1392 KB Output is correct
14 Correct 53 ms 1276 KB Output is correct
15 Correct 57 ms 1284 KB Output is correct
16 Correct 55 ms 1268 KB Output is correct
17 Correct 50 ms 1284 KB Output is correct
18 Correct 53 ms 1372 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1057 ms 4064 KB Output is correct
2 Correct 1105 ms 4144 KB Output is correct
3 Correct 1026 ms 4056 KB Output is correct
4 Correct 735 ms 2784 KB Output is correct
5 Correct 955 ms 3216 KB Output is correct
6 Correct 866 ms 3000 KB Output is correct
7 Correct 862 ms 3064 KB Output is correct
8 Correct 864 ms 3252 KB Output is correct
9 Correct 794 ms 3096 KB Output is correct
10 Correct 425 ms 3016 KB Output is correct
11 Correct 442 ms 2992 KB Output is correct
12 Correct 544 ms 2728 KB Output is correct
13 Correct 560 ms 2804 KB Output is correct
14 Correct 506 ms 2936 KB Output is correct
15 Correct 634 ms 2980 KB Output is correct
16 Correct 646 ms 2960 KB Output is correct
17 Correct 723 ms 2768 KB Output is correct
18 Correct 719 ms 2776 KB Output is correct
19 Correct 727 ms 2900 KB Output is correct
20 Correct 463 ms 3248 KB Output is correct
21 Correct 419 ms 3192 KB Output is correct
22 Correct 612 ms 3048 KB Output is correct
23 Correct 605 ms 3180 KB Output is correct
24 Correct 539 ms 3024 KB Output is correct
25 Correct 575 ms 3020 KB Output is correct
26 Correct 630 ms 3088 KB Output is correct
27 Correct 632 ms 3172 KB Output is correct
28 Correct 603 ms 2996 KB Output is correct
29 Correct 539 ms 2928 KB Output is correct
30 Correct 640 ms 2964 KB Output is correct
31 Correct 56 ms 1484 KB Output is correct
32 Correct 56 ms 1372 KB Output is correct
33 Correct 54 ms 1324 KB Output is correct
34 Correct 52 ms 1368 KB Output is correct
35 Correct 63 ms 1196 KB Output is correct
36 Correct 57 ms 1380 KB Output is correct
37 Correct 49 ms 1280 KB Output is correct
38 Correct 50 ms 1272 KB Output is correct
39 Correct 46 ms 1152 KB Output is correct
40 Correct 47 ms 1148 KB Output is correct
41 Correct 57 ms 1152 KB Output is correct
42 Correct 46 ms 1244 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 49 ms 1204 KB Output is correct
2 Correct 54 ms 1236 KB Output is correct
3 Correct 44 ms 1272 KB Output is correct
4 Correct 89 ms 1536 KB Output is correct
5 Correct 86 ms 1568 KB Output is correct
6 Correct 86 ms 1756 KB Output is correct
7 Correct 95 ms 1684 KB Output is correct
8 Correct 92 ms 1684 KB Output is correct
9 Correct 512 ms 3732 KB Output is correct
10 Correct 643 ms 3512 KB Output is correct
11 Correct 593 ms 3536 KB Output is correct
12 Correct 48 ms 1420 KB Output is correct
13 Correct 49 ms 1144 KB Output is correct
14 Correct 50 ms 1304 KB Output is correct
15 Correct 43 ms 1400 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1002 ms 4148 KB Output is correct
2 Correct 1010 ms 4172 KB Output is correct
3 Correct 1020 ms 4292 KB Output is correct
4 Correct 741 ms 2988 KB Output is correct
5 Partially correct 953 ms 3264 KB Partially correct
6 Correct 890 ms 3096 KB Output is correct
7 Correct 809 ms 3216 KB Output is correct
8 Correct 825 ms 2904 KB Output is correct
9 Correct 897 ms 3116 KB Output is correct
10 Correct 421 ms 2964 KB Output is correct
11 Correct 452 ms 3056 KB Output is correct
12 Correct 485 ms 2720 KB Output is correct
13 Correct 480 ms 2796 KB Output is correct
14 Correct 541 ms 2800 KB Output is correct
15 Correct 564 ms 2852 KB Output is correct
16 Correct 610 ms 2768 KB Output is correct
17 Correct 765 ms 2860 KB Output is correct
18 Correct 742 ms 2916 KB Output is correct
19 Correct 676 ms 2940 KB Output is correct
20 Correct 457 ms 3256 KB Output is correct
21 Correct 432 ms 3164 KB Output is correct
22 Correct 542 ms 2968 KB Output is correct
23 Correct 656 ms 3136 KB Output is correct
24 Correct 608 ms 3112 KB Output is correct
25 Correct 610 ms 3120 KB Output is correct
26 Correct 590 ms 3176 KB Output is correct
27 Correct 605 ms 3124 KB Output is correct
28 Correct 564 ms 3032 KB Output is correct
29 Correct 552 ms 2932 KB Output is correct
30 Correct 487 ms 2996 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 937 ms 4240 KB Output is correct
2 Correct 910 ms 4172 KB Output is correct
3 Correct 978 ms 4260 KB Output is correct
4 Correct 692 ms 2864 KB Output is correct
5 Correct 940 ms 3360 KB Output is correct
6 Correct 833 ms 3044 KB Output is correct
7 Correct 846 ms 3092 KB Output is correct
8 Correct 819 ms 3100 KB Output is correct
9 Correct 773 ms 3116 KB Output is correct
10 Correct 398 ms 2940 KB Output is correct
11 Correct 509 ms 3012 KB Output is correct
12 Correct 554 ms 2748 KB Output is correct
13 Incorrect 580 ms 2724 KB Output isn't correct
14 Halted 0 ms 0 KB -