Submission #289691

# Submission time Handle Problem Language Result Execution time Memory
289691 2020-09-02T22:50:11 Z b00n0rp Miners (IOI07_miners) C++17
100 / 100
47 ms 1268 KB
/*input
6
MBMFFB
16
MMBMBBBBMMMMMBMB
*/		
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define int ll
typedef vector <int> vi;
typedef vector<vi> vvi;
typedef map<int,int> mii;
typedef pair<int,int> pii;
#define pb push_back
#define INF 1000000000
#define mp make_pair
#define MOD 1000000007
#define F first
#define S second
const double PI=3.141592653589793238462643383279502884197169399375105820974944;
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REPD(i,n) for(int i=(n);i>=0;i--)
#define FORD(i,a,b) for(int i=(a);i>=b;i--)
#define all(v) v.begin(),v.end()
#define itr ::iterator it
#define WL(t) while(t --)
#define gcd(a,b) __gcd((a),(b))
#define lcm(a,b) ((a)*(b))/gcd((a),(b))
#define remin(a,b) (a) = min((a),(b))
#define remax(a,b) (a) = max((a),(b))

int n;
int a[100005];
int dp[2][4][4][4];

int ore(int a,int b,int c){
	int cnt = 0;
	if(a == 1 or b == 1 or c == 1) cnt ++;
	if(a == 2 or b == 2 or c == 2) cnt ++;
	if(a == 3 or b == 3 or c == 3) cnt ++;
	return cnt;
}

signed main() {
	
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n;
	REP(i,n+5) a[i] = 0;
	REP(i,2) REP(j,4) REP(k,4) REP(l,4) dp[i][j][k][l] = 0;
	REP(i,n){
		char c; cin >> c;
		if(c == 'M') a[i+1] = 1;
		else if(c == 'B') a[i+1] = 2;
		else a[i+1] = 3;
	}
	FORD(i,n,1){
		REP(j,4){
			REP(k,4){
				REP(l,4){
					int x1 = ore(a[i],a[i-1],j)+dp[(i+1)%2][a[i-1]][k][l];
					int x2 = ore(a[i],k,l)+dp[(i+1)%2][k][a[i-1]][j];
					dp[i%2][j][k][l] = max(x1,x2);
				}
			}
		}
	}
	cout << dp[1][0][0][0];
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 34 ms 1024 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 47 ms 1268 KB Output is correct