Submission #54583

# Submission time Handle Problem Language Result Execution time Memory
54583 2018-07-04T07:03:47 Z 나는김현수(#2054) Miners (IOI07_miners) C++11
100 / 100
309 ms 704 KB
#include<bits/stdc++.h>
using namespace std;
const int N = 100005, inf = 1e9;

int n, dt[2][4][4][4][4];
char a[N];

int main()
{
	scanf("%d%s",&n,a+1);
	for(int j=0;j<256;j++) {
		int A = j/64, B = j/16%4, C = j/4%4, D = j%4;
		dt[0][A][B][C][D] = -inf;
	}
	dt[0][0][0][0][0] = 0;
	for(int i=1;i<=n;i++) {
		int E = (a[i] == 'M')*1 + (a[i] == 'B')*2 + (a[i] == 'F')*3;
		for(int j=0;j<256;j++) {
			int A = j/64, B = j/16%4, C = j/4%4, D = j%4;
			dt[i%2][A][B][C][D] = -inf;
		}
		for(int j=0;j<256;j++) {
			int A = j/64, B = j/16%4, C = j/4%4, D = j%4, P = dt[1-i%2][A][B][C][D], X;
			if(A == 0 && B == 0) {
				dt[i%2][E][E][C][D] = max(dt[i%2][E][E][C][D], P + 1);
			}
			else {
				X = (A != B) + (A != E) + (B != E);
				X = (X >= 3) + (X >= 2) + 1;
				dt[i%2][B][E][C][D] = max(dt[i%2][B][E][C][D], P + X);
			}
			if(C == 0 && D == 0) {
				dt[i%2][A][B][E][E] = max(dt[i%2][A][B][E][E], P + 1);
			}
			else {
				X = (C != D) + (C != E) + (D != E);
				X = (X >= 3) + (X >= 2) + 1;
				dt[i%2][A][B][D][E] = max(dt[i%2][A][B][D][E], P + X);
			}
		}
	}
	int ans = 0;
	for(int j=0;j<256;j++) {
		int A = j/64, B = j/16%4, C = j/4%4, D = j%4;
		ans = max(ans, dt[n%2][A][B][C][D]);
	}
	printf("%d\n",ans);
}

Compilation message

miners.cpp: In function 'int main()':
miners.cpp:10:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%s",&n,a+1);
  ~~~~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 544 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 17 ms 620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 32 ms 620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 80 ms 620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 232 ms 620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 309 ms 704 KB Output is correct