답안 #39257

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
39257 2018-01-10T12:39:52 Z 14kg 열대 식물원 (Tropical Garden) (IOI11_garden) C++11
69 / 100
5000 ms 189896 KB
#include "garden.h"
#include "gardenlib.h"
#include <algorithm>
#include <vector>
#define N 150001

using namespace std;
int n, m, start, p[19], R, Rw, tot;
bool check[N][2][19];
pair<int, int> r[N];
vector<int> r1[N], r2[N];
vector<pair<int, int> > d[N][2][19];

void Push_r(int x, int y) {
	if (!r[x].first) r[x].first = y;
	else if (!r[x].second) r[x].second = y;
}
void f(int x, int y, int s) {
	if (s == 0 || check[x][y][s]) return;

	f(x, y, s - 1), check[x][y][s] = true;
	for (auto i : d[x][y][s - 1]) {
		f(i.first, i.second, s - 1);
		for (auto j : d[i.first][i.second][s - 1]) {
			f(j.first, j.second, s - 1);
			for (auto p : d[j.first][j.second][s - 1]) {
				d[x][y][s].push_back(p);
			}
		}
	}
}
void g(int x, int y, int R, int Rw) {
	if (R == 0) {
		if (y == 0 || r[x].first == 0) tot++;
		return;
	}
	while (p[Rw] > R) Rw--;

	f(x, y, Rw);
	for (auto i : d[x][y][Rw]) g(i.first, i.second, R - p[Rw], Rw);
}
void count_routes(int _n, int _m, int _s, int _r[][2], int Q_len, int Q[]) {
	n = _n, start = _s + 1, p[0] = 1;
	for (int i = 1; i < 19; i++) p[i] = p[i - 1] * 3;

	for (int i = 0; i < _m; i++) {
		int x = _r[i][0] + 1, y = _r[i][1] + 1;
		Push_r(x, y), Push_r(y, x);
	}
	for (int i = 1; i <= n; i++) {
		if (!r[i].second) r[i].second = r[i].first, r[i].first = 0;

		if (r[i].first) r1[r[i].first].push_back(i);
		r2[r[i].second].push_back(i);

		if (r[r[i].first].first == i || (r[r[i].first].first == 0 && r[r[i].first].second == i)) d[r[i].first][1][0].push_back({ i,0 });
		if (r[r[i].second].first == i || (r[r[i].second].first == 0 && r[r[i].second].second == i)) d[r[i].second][1][0].push_back({ i,1 });
	}

	for (int i = 1; i <= n; i++) {
		for (auto j : r1[i])
			if (j != r[i].first && (r[i].first || r[i].second != j)) d[i][0][0].push_back({ j,0 });
		for (auto j : r2[i])
			if (j != r[i].first && (r[i].first || r[i].second != j)) d[i][0][0].push_back({ j,1 });
	}

	for (int i = 0; i < Q_len; i++) {
		tot = 0, g(start, 0, Q[i], 18), g(start, 1, Q[i], 18);
		answer(tot);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 131 ms 141400 KB Output is correct
2 Correct 134 ms 141496 KB Output is correct
3 Correct 135 ms 141496 KB Output is correct
4 Correct 135 ms 141300 KB Output is correct
5 Correct 133 ms 141284 KB Output is correct
6 Correct 134 ms 141440 KB Output is correct
7 Correct 138 ms 141256 KB Output is correct
8 Correct 141 ms 141468 KB Output is correct
9 Correct 135 ms 141472 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 131 ms 141400 KB Output is correct
2 Correct 134 ms 141496 KB Output is correct
3 Correct 135 ms 141496 KB Output is correct
4 Correct 135 ms 141300 KB Output is correct
5 Correct 133 ms 141284 KB Output is correct
6 Correct 134 ms 141440 KB Output is correct
7 Correct 138 ms 141256 KB Output is correct
8 Correct 141 ms 141468 KB Output is correct
9 Correct 135 ms 141472 KB Output is correct
10 Correct 131 ms 141204 KB Output is correct
11 Correct 153 ms 144472 KB Output is correct
12 Correct 170 ms 146116 KB Output is correct
13 Correct 795 ms 189684 KB Output is correct
14 Correct 396 ms 163644 KB Output is correct
15 Correct 951 ms 188656 KB Output is correct
16 Correct 319 ms 157020 KB Output is correct
17 Correct 656 ms 173668 KB Output is correct
18 Correct 184 ms 145724 KB Output is correct
19 Correct 370 ms 162716 KB Output is correct
20 Correct 960 ms 189896 KB Output is correct
21 Correct 380 ms 162196 KB Output is correct
22 Correct 418 ms 162604 KB Output is correct
23 Correct 320 ms 160804 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 131 ms 141400 KB Output is correct
2 Correct 134 ms 141496 KB Output is correct
3 Correct 135 ms 141496 KB Output is correct
4 Correct 135 ms 141300 KB Output is correct
5 Correct 133 ms 141284 KB Output is correct
6 Correct 134 ms 141440 KB Output is correct
7 Correct 138 ms 141256 KB Output is correct
8 Correct 141 ms 141468 KB Output is correct
9 Correct 135 ms 141472 KB Output is correct
10 Correct 131 ms 141204 KB Output is correct
11 Correct 153 ms 144472 KB Output is correct
12 Correct 170 ms 146116 KB Output is correct
13 Correct 795 ms 189684 KB Output is correct
14 Correct 396 ms 163644 KB Output is correct
15 Correct 951 ms 188656 KB Output is correct
16 Correct 319 ms 157020 KB Output is correct
17 Correct 656 ms 173668 KB Output is correct
18 Correct 184 ms 145724 KB Output is correct
19 Correct 370 ms 162716 KB Output is correct
20 Correct 960 ms 189896 KB Output is correct
21 Correct 380 ms 162196 KB Output is correct
22 Correct 418 ms 162604 KB Output is correct
23 Correct 320 ms 160804 KB Output is correct
24 Correct 136 ms 141320 KB Output is correct
25 Correct 154 ms 144476 KB Output is correct
26 Correct 178 ms 146088 KB Output is correct
27 Correct 821 ms 189596 KB Output is correct
28 Execution timed out 5015 ms 163880 KB Time limit exceeded
29 Halted 0 ms 0 KB -