답안 #459552

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
459552 2021-08-08T16:00:31 Z TeaTime Growing Vegetable is Fun 3 (JOI19_ho_t3) C++14
60 / 100
500 ms 972316 KB
//#pragma GCC optimize("O3")
//#pragma GCC target("avx2")
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <unordered_map>

using namespace std;

#define fastInp cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);

typedef int ll;
typedef long double ld;

const ll K = 410, INF = 1e9;

ll n;
ll dp[K][K][K][3], pnlty[K][K][K][3];
ll cnt[3];
ll pos[3][K];
tuple<ll, ll, ll> prefCnt[K];

int main() {
	fastInp;

	cin >> n;
	string s;
	cin >> s;
	
	int i = 1;
	for (auto &c : s) {
		if (c == 'R') c = 0;
		if (c == 'G') c = 1;
		if (c == 'Y') c = 2;
		cnt[c]++;
		pos[c][cnt[c]] = i;
		prefCnt[i] = { cnt[0], cnt[1], cnt[2] };
		i++;
	}

	for (int i = 0; i < K; i++) {
		for (int j = 0; j < K; j++) {
			for (int k = 0; k < K; k++) {
				for (int t = 0; t < 3; t++) dp[i][j][k][t] = INF;
			}
		}
	}

	dp[0][0][0][0] = 0;
	dp[0][0][0][1] = 0;
	dp[0][0][0][2] = 0;
	for (int i = 0; i <= cnt[0]; i++) {
		for (int j = 0; j <= cnt[1]; j++) {
			for (int k = 0; k <= cnt[2]; k++) {
				for (int t = 0; t < 3; t++) {
					ll ind;
					
					if (t == 0) {
						ind = pos[t][i + 1];
						pnlty[i][j][k][t] = max(0, get<1>(prefCnt[ind]) - j) + max(0, get<2>(prefCnt[ind]) - k);
					} else if (t == 1) {
						ind = pos[t][j + 1];
						pnlty[i][j][k][t] = max(0, get<0>(prefCnt[ind]) - i) + max(0, get<2>(prefCnt[ind]) - k);
					} else {
						ind = pos[t][k + 1];
						pnlty[i][j][k][t] = max(0, get<0>(prefCnt[ind]) - i) + max(0, get<1>(prefCnt[ind]) - j);
					}
				}
			}
		}
	}

	for (int i = 0; i <= cnt[0]; i++) {
		for (int j = 0; j <= cnt[1]; j++) {
			for (int k = 0; k <= cnt[2]; k++) {
				for (int t = 0; t < 3; t++) {
					for (int add = 0; add < 3; add++) {
						if (add == t) continue;
						ll cnt = dp[i][j][k][t] + pnlty[i][j][k][add];
						if (add == 0) {
							dp[i + 1][j][k][add] = min(dp[i + 1][j][k][add], cnt);
						} else if (add == 1) {
							dp[i][j + 1][k][add] = min(dp[i][j + 1][k][add], cnt);
						} else {
							dp[i][j][k + 1][add] = min(dp[i][j][k + 1][add], cnt);
						}
					}
				}
			}
		}
	}
	ll a = INF;
	for (int i = 0; i < 3; i++) a = min(a, dp[cnt[0]][cnt[1]][cnt[2]][i]);
	
	if (a >= INF) {
		cout << "-1\n";
	} else {
		cout << a;
	}

	return 0;
}

Compilation message

joi2019_ho_t3.cpp: In function 'int main()':
joi2019_ho_t3.cpp:39:7: warning: array subscript has type 'char' [-Wchar-subscripts]
   39 |   cnt[c]++;
      |       ^
joi2019_ho_t3.cpp:40:7: warning: array subscript has type 'char' [-Wchar-subscripts]
   40 |   pos[c][cnt[c]] = i;
      |       ^
joi2019_ho_t3.cpp:40:14: warning: array subscript has type 'char' [-Wchar-subscripts]
   40 |   pos[c][cnt[c]] = i;
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Correct 448 ms 809508 KB Output is correct
2 Correct 431 ms 809540 KB Output is correct
3 Correct 428 ms 809452 KB Output is correct
4 Correct 438 ms 809568 KB Output is correct
5 Correct 435 ms 809680 KB Output is correct
6 Correct 428 ms 809744 KB Output is correct
7 Correct 434 ms 809712 KB Output is correct
8 Correct 443 ms 809648 KB Output is correct
9 Correct 428 ms 809760 KB Output is correct
10 Correct 453 ms 809848 KB Output is correct
11 Correct 440 ms 809696 KB Output is correct
12 Correct 438 ms 809684 KB Output is correct
13 Correct 431 ms 809620 KB Output is correct
14 Correct 434 ms 809660 KB Output is correct
15 Correct 431 ms 809564 KB Output is correct
16 Correct 434 ms 809688 KB Output is correct
17 Correct 428 ms 809564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 448 ms 809508 KB Output is correct
2 Correct 431 ms 809540 KB Output is correct
3 Correct 428 ms 809452 KB Output is correct
4 Correct 438 ms 809568 KB Output is correct
5 Correct 435 ms 809680 KB Output is correct
6 Correct 428 ms 809744 KB Output is correct
7 Correct 434 ms 809712 KB Output is correct
8 Correct 443 ms 809648 KB Output is correct
9 Correct 428 ms 809760 KB Output is correct
10 Correct 453 ms 809848 KB Output is correct
11 Correct 440 ms 809696 KB Output is correct
12 Correct 438 ms 809684 KB Output is correct
13 Correct 431 ms 809620 KB Output is correct
14 Correct 434 ms 809660 KB Output is correct
15 Correct 431 ms 809564 KB Output is correct
16 Correct 434 ms 809688 KB Output is correct
17 Correct 428 ms 809564 KB Output is correct
18 Correct 440 ms 811608 KB Output is correct
19 Correct 441 ms 811128 KB Output is correct
20 Correct 437 ms 811548 KB Output is correct
21 Correct 428 ms 811680 KB Output is correct
22 Correct 426 ms 810876 KB Output is correct
23 Correct 432 ms 811352 KB Output is correct
24 Correct 432 ms 810824 KB Output is correct
25 Correct 453 ms 813256 KB Output is correct
26 Correct 432 ms 813348 KB Output is correct
27 Correct 442 ms 812428 KB Output is correct
28 Correct 427 ms 811544 KB Output is correct
29 Correct 423 ms 811436 KB Output is correct
30 Correct 427 ms 811452 KB Output is correct
31 Correct 437 ms 811180 KB Output is correct
32 Correct 422 ms 811544 KB Output is correct
33 Correct 426 ms 813112 KB Output is correct
34 Correct 432 ms 812820 KB Output is correct
35 Correct 436 ms 811940 KB Output is correct
36 Correct 432 ms 811136 KB Output is correct
37 Correct 437 ms 810884 KB Output is correct
38 Correct 428 ms 811368 KB Output is correct
39 Correct 446 ms 811520 KB Output is correct
40 Correct 428 ms 809596 KB Output is correct
41 Correct 435 ms 811372 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 435 ms 809500 KB Output is correct
2 Correct 500 ms 972168 KB Output is correct
3 Correct 496 ms 971332 KB Output is correct
4 Execution timed out 510 ms 972316 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 448 ms 809508 KB Output is correct
2 Correct 431 ms 809540 KB Output is correct
3 Correct 428 ms 809452 KB Output is correct
4 Correct 438 ms 809568 KB Output is correct
5 Correct 435 ms 809680 KB Output is correct
6 Correct 428 ms 809744 KB Output is correct
7 Correct 434 ms 809712 KB Output is correct
8 Correct 443 ms 809648 KB Output is correct
9 Correct 428 ms 809760 KB Output is correct
10 Correct 453 ms 809848 KB Output is correct
11 Correct 440 ms 809696 KB Output is correct
12 Correct 438 ms 809684 KB Output is correct
13 Correct 431 ms 809620 KB Output is correct
14 Correct 434 ms 809660 KB Output is correct
15 Correct 431 ms 809564 KB Output is correct
16 Correct 434 ms 809688 KB Output is correct
17 Correct 428 ms 809564 KB Output is correct
18 Correct 440 ms 811608 KB Output is correct
19 Correct 441 ms 811128 KB Output is correct
20 Correct 437 ms 811548 KB Output is correct
21 Correct 428 ms 811680 KB Output is correct
22 Correct 426 ms 810876 KB Output is correct
23 Correct 432 ms 811352 KB Output is correct
24 Correct 432 ms 810824 KB Output is correct
25 Correct 453 ms 813256 KB Output is correct
26 Correct 432 ms 813348 KB Output is correct
27 Correct 442 ms 812428 KB Output is correct
28 Correct 427 ms 811544 KB Output is correct
29 Correct 423 ms 811436 KB Output is correct
30 Correct 427 ms 811452 KB Output is correct
31 Correct 437 ms 811180 KB Output is correct
32 Correct 422 ms 811544 KB Output is correct
33 Correct 426 ms 813112 KB Output is correct
34 Correct 432 ms 812820 KB Output is correct
35 Correct 436 ms 811940 KB Output is correct
36 Correct 432 ms 811136 KB Output is correct
37 Correct 437 ms 810884 KB Output is correct
38 Correct 428 ms 811368 KB Output is correct
39 Correct 446 ms 811520 KB Output is correct
40 Correct 428 ms 809596 KB Output is correct
41 Correct 435 ms 811372 KB Output is correct
42 Correct 435 ms 809500 KB Output is correct
43 Correct 500 ms 972168 KB Output is correct
44 Correct 496 ms 971332 KB Output is correct
45 Execution timed out 510 ms 972316 KB Time limit exceeded
46 Halted 0 ms 0 KB -