Submission #544775

# Submission time Handle Problem Language Result Execution time Memory
544775 2022-04-02T16:42:50 Z sliviu Miners (IOI07_miners) C++17
100 / 100
142 ms 592 KB
#include <bits/stdc++.h>

using namespace std;

int main() {
	int n, ans = 0, dp[2][4][4][4][4] = {}, reset[4][4][4][4];
	cin >> n;
	string s;
	cin >> s;
	for (int i = 0; i < 4; ++i)
		for (int j = 0; j < 4; ++j)
			for (int k = 0; k < 4; ++k)
				for (int l = 0; l < 4; ++l)
					reset[i][j][k][l] = -1e9;
	memcpy(dp[1], reset, sizeof(reset));
	dp[1][0][0][0][0] = 0;
	for (int i = 0; i < n; ++i) {
		int cur = s[i] == 'M' ? 1 : s[i] == 'F' ? 2 : 3;
		auto cost = [&](int x, int y, int z) {
			int cnt[4] = {}, ans = 0;
			++cnt[x], ++cnt[y], ++cnt[z];
			for (int i = 1; i < 4; ++i)
				ans += !!cnt[i];
			return ans;
		};
		memcpy(dp[i & 1], reset, sizeof(reset));
		for (int fll = 0; fll < 4; ++fll)
			for (int fl = !!fll; fl < 4; ++fl)
				for (int sll = 0; sll < 4; ++sll)
					for (int sl = !!sll; sl < 4; ++sl) {
						dp[i & 1][fl][cur][sll][sl] = max(dp[i & 1][fl][cur][sll][sl], dp[(i & 1) ^ 1][fll][fl][sll][sl] + cost(fll, fl, cur));
						dp[i & 1][fll][fl][sl][cur] = max(dp[i & 1][fll][fl][sl][cur], dp[(i & 1) ^ 1][fll][fl][sll][sl] + cost(sll, sl, cur));
						ans = max({ans,	dp[i & 1][fl][cur][sll][sl],dp[i & 1][fll][fl][sl][cur]});
					}
	}
	cout << ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 300 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 31 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 101 ms 560 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 142 ms 592 KB Output is correct