답안 #108536

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
108536 2019-04-30T06:50:08 Z E869120 Amusement Park (JOI17_amusement_park) C++14
83 / 100
1046 ms 4304 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 = 2555;
	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 = 2555;
	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 50 ms 1152 KB Output is correct
2 Correct 45 ms 1288 KB Output is correct
3 Correct 72 ms 1396 KB Output is correct
4 Correct 45 ms 1392 KB Output is correct
5 Correct 46 ms 1152 KB Output is correct
6 Correct 44 ms 1400 KB Output is correct
7 Correct 52 ms 1512 KB Output is correct
8 Correct 57 ms 1404 KB Output is correct
9 Correct 54 ms 1396 KB Output is correct
10 Correct 52 ms 1360 KB Output is correct
11 Correct 81 ms 1676 KB Output is correct
12 Correct 51 ms 1160 KB Output is correct
13 Correct 51 ms 1396 KB Output is correct
14 Correct 52 ms 1392 KB Output is correct
15 Correct 52 ms 1276 KB Output is correct
16 Correct 59 ms 1264 KB Output is correct
17 Correct 49 ms 1384 KB Output is correct
18 Correct 51 ms 1276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 993 ms 4248 KB Output is correct
2 Correct 950 ms 4132 KB Output is correct
3 Correct 1046 ms 4136 KB Output is correct
4 Correct 799 ms 2996 KB Output is correct
5 Correct 954 ms 3152 KB Output is correct
6 Correct 823 ms 2984 KB Output is correct
7 Correct 768 ms 3128 KB Output is correct
8 Correct 859 ms 3176 KB Output is correct
9 Correct 811 ms 3092 KB Output is correct
10 Correct 407 ms 3052 KB Output is correct
11 Correct 387 ms 3008 KB Output is correct
12 Correct 434 ms 2716 KB Output is correct
13 Correct 518 ms 2848 KB Output is correct
14 Correct 536 ms 2744 KB Output is correct
15 Correct 645 ms 2768 KB Output is correct
16 Correct 595 ms 2864 KB Output is correct
17 Correct 791 ms 2932 KB Output is correct
18 Correct 686 ms 2964 KB Output is correct
19 Correct 675 ms 2928 KB Output is correct
20 Correct 509 ms 3276 KB Output is correct
21 Correct 469 ms 3332 KB Output is correct
22 Correct 564 ms 3048 KB Output is correct
23 Correct 560 ms 3120 KB Output is correct
24 Correct 530 ms 3080 KB Output is correct
25 Correct 567 ms 3384 KB Output is correct
26 Correct 554 ms 3096 KB Output is correct
27 Correct 599 ms 3096 KB Output is correct
28 Correct 521 ms 3244 KB Output is correct
29 Correct 452 ms 2984 KB Output is correct
30 Correct 588 ms 3020 KB Output is correct
31 Correct 51 ms 1416 KB Output is correct
32 Correct 45 ms 1388 KB Output is correct
33 Correct 52 ms 1368 KB Output is correct
34 Correct 55 ms 1416 KB Output is correct
35 Correct 54 ms 1288 KB Output is correct
36 Correct 51 ms 1288 KB Output is correct
37 Correct 50 ms 1300 KB Output is correct
38 Correct 53 ms 1272 KB Output is correct
39 Correct 50 ms 1388 KB Output is correct
40 Correct 54 ms 1288 KB Output is correct
41 Correct 51 ms 1152 KB Output is correct
42 Correct 47 ms 1308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 53 ms 1256 KB Output is correct
2 Correct 53 ms 1248 KB Output is correct
3 Correct 53 ms 1144 KB Output is correct
4 Correct 96 ms 1556 KB Output is correct
5 Correct 105 ms 1728 KB Output is correct
6 Correct 110 ms 1720 KB Output is correct
7 Correct 100 ms 1684 KB Output is correct
8 Correct 102 ms 1676 KB Output is correct
9 Correct 491 ms 3376 KB Output is correct
10 Correct 617 ms 3660 KB Output is correct
11 Correct 616 ms 3504 KB Output is correct
12 Correct 48 ms 1288 KB Output is correct
13 Correct 59 ms 1280 KB Output is correct
14 Correct 49 ms 1388 KB Output is correct
15 Correct 55 ms 1272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1043 ms 4164 KB Output is correct
2 Correct 956 ms 4268 KB Output is correct
3 Correct 1042 ms 4204 KB Output is correct
4 Correct 776 ms 3000 KB Output is correct
5 Correct 969 ms 3236 KB Output is correct
6 Correct 850 ms 3120 KB Output is correct
7 Correct 798 ms 3140 KB Output is correct
8 Correct 832 ms 3152 KB Output is correct
9 Correct 799 ms 2992 KB Output is correct
10 Correct 414 ms 3008 KB Output is correct
11 Correct 426 ms 3128 KB Output is correct
12 Correct 487 ms 2856 KB Output is correct
13 Correct 473 ms 2856 KB Output is correct
14 Correct 504 ms 2988 KB Output is correct
15 Correct 615 ms 2864 KB Output is correct
16 Correct 688 ms 3004 KB Output is correct
17 Correct 662 ms 2996 KB Output is correct
18 Correct 687 ms 3016 KB Output is correct
19 Correct 645 ms 2992 KB Output is correct
20 Correct 479 ms 3256 KB Output is correct
21 Correct 414 ms 3128 KB Output is correct
22 Correct 564 ms 3160 KB Output is correct
23 Correct 593 ms 3096 KB Output is correct
24 Correct 600 ms 3136 KB Output is correct
25 Correct 557 ms 3256 KB Output is correct
26 Correct 603 ms 3212 KB Output is correct
27 Correct 614 ms 3252 KB Output is correct
28 Correct 646 ms 2996 KB Output is correct
29 Correct 524 ms 2984 KB Output is correct
30 Correct 598 ms 2968 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 962 ms 4172 KB Output is correct
2 Correct 959 ms 4304 KB Output is correct
3 Correct 1028 ms 4264 KB Output is correct
4 Incorrect 706 ms 2992 KB Output isn't correct
5 Halted 0 ms 0 KB -