Submission #459551

# Submission time Handle Problem Language Result Execution time Memory
459551 2021-08-08T16:00:19 Z TeaTime Growing Vegetable is Fun 3 (JOI19_ho_t3) C++17
5 / 100
500 ms 972244 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;
      |              ^
# Verdict Execution time Memory Grader output
1 Correct 423 ms 809492 KB Output is correct
2 Correct 450 ms 809444 KB Output is correct
3 Correct 421 ms 809520 KB Output is correct
4 Correct 426 ms 809580 KB Output is correct
5 Correct 419 ms 809728 KB Output is correct
6 Correct 416 ms 809688 KB Output is correct
7 Correct 419 ms 809688 KB Output is correct
8 Correct 424 ms 809596 KB Output is correct
9 Correct 422 ms 809796 KB Output is correct
10 Correct 424 ms 809796 KB Output is correct
11 Correct 423 ms 809656 KB Output is correct
12 Correct 438 ms 809668 KB Output is correct
13 Correct 422 ms 809608 KB Output is correct
14 Correct 438 ms 809704 KB Output is correct
15 Correct 435 ms 809704 KB Output is correct
16 Correct 419 ms 809668 KB Output is correct
17 Correct 426 ms 809472 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 423 ms 809492 KB Output is correct
2 Correct 450 ms 809444 KB Output is correct
3 Correct 421 ms 809520 KB Output is correct
4 Correct 426 ms 809580 KB Output is correct
5 Correct 419 ms 809728 KB Output is correct
6 Correct 416 ms 809688 KB Output is correct
7 Correct 419 ms 809688 KB Output is correct
8 Correct 424 ms 809596 KB Output is correct
9 Correct 422 ms 809796 KB Output is correct
10 Correct 424 ms 809796 KB Output is correct
11 Correct 423 ms 809656 KB Output is correct
12 Correct 438 ms 809668 KB Output is correct
13 Correct 422 ms 809608 KB Output is correct
14 Correct 438 ms 809704 KB Output is correct
15 Correct 435 ms 809704 KB Output is correct
16 Correct 419 ms 809668 KB Output is correct
17 Correct 426 ms 809472 KB Output is correct
18 Execution timed out 504 ms 811528 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 433 ms 809548 KB Output is correct
2 Correct 493 ms 972244 KB Output is correct
3 Correct 492 ms 971400 KB Output is correct
4 Execution timed out 506 ms 972240 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 423 ms 809492 KB Output is correct
2 Correct 450 ms 809444 KB Output is correct
3 Correct 421 ms 809520 KB Output is correct
4 Correct 426 ms 809580 KB Output is correct
5 Correct 419 ms 809728 KB Output is correct
6 Correct 416 ms 809688 KB Output is correct
7 Correct 419 ms 809688 KB Output is correct
8 Correct 424 ms 809596 KB Output is correct
9 Correct 422 ms 809796 KB Output is correct
10 Correct 424 ms 809796 KB Output is correct
11 Correct 423 ms 809656 KB Output is correct
12 Correct 438 ms 809668 KB Output is correct
13 Correct 422 ms 809608 KB Output is correct
14 Correct 438 ms 809704 KB Output is correct
15 Correct 435 ms 809704 KB Output is correct
16 Correct 419 ms 809668 KB Output is correct
17 Correct 426 ms 809472 KB Output is correct
18 Execution timed out 504 ms 811528 KB Time limit exceeded
19 Halted 0 ms 0 KB -