/*
Editor: Abdelrahman Hossam
Nickname: Blobo2_Blobo2
I love my mama
*/\
#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define endl "\n"
#define gen(arr,n,nxt) generate(arr,arr+n,nxt)
#define Blobo2 ios_base::sync_with_stdio(false);cin.tie(0);
const int mod = 1e9+7;
int nxt(){int x;cin>>x;return x;}
int dp[100000][28][28],n;
string s;
int mask3[4][4][4];
int mask1[3], mask2[3];
int solve(int idx=0){
if(idx == n)
return 0;
int m1 = mask3[mask1[0]][mask1[1]][mask1[2]];
int m2 = mask3[mask2[0]][mask2[1]][mask2[2]];
int &ret = dp[idx][m1][m2];
if(~ret)return ret;
int meal = 0;
if(s[idx] == 'M')meal = 1;
if(s[idx] == 'B')meal = 2;
if(s[idx] == 'F')meal = 4;
int x = mask1[0];
swap(mask1[0],mask1[1]);
swap(mask1[2],mask1[1]);
mask1[2] = (meal/2)+1;
int c=0;
if((mask1[0] == mask1[1] && mask1[1] == mask1[2] && mask1[0] && mask1[1] && mask1[2]) || (mask1[2] && !mask1[1]))c=1;
else if(((mask1[0] == mask1[1])
|| (mask1[0] == mask1[2])
|| (mask1[1] == mask1[2]))
&& mask1[0] && mask1[1] && mask1[2])c = 2;
else if(mask1[0] == 0 && mask1[1] == mask1[2])c = 1;
else if(mask1[0] == 0 && mask1[1] != mask1[2])c = 2;
else if(mask1[0] && mask1[1] && mask1[2])c=3;
ret = solve(idx+1) + c;
swap(mask1[2],mask1[1]);
swap(mask1[0],mask1[1]);
mask1[0] = x;
x = mask2[0];
swap(mask2[0],mask2[1]);
swap(mask2[2],mask2[1]);
mask2[2] = (meal/2)+1;
c=0;
if((mask2[0] == mask2[1] && mask2[1] == mask2[2] && mask2[0] && mask2[1] && mask2[2]) || (mask2[2] && !mask2[1]))c=1;
else if(((mask2[0] == mask2[1])
|| (mask2[0] == mask2[2])
|| (mask2[1] == mask2[2]))
&& mask2[0] && mask2[1] && mask2[2])c = 2;
else if(mask2[0] == 0 && mask2[1] == mask2[2])c = 1;
else if(mask2[0] == 0 && mask2[1] != mask2[2])c = 2;
else if(mask2[0] && mask2[1] && mask2[2])c=3;
ret = max(ret,solve(idx+1) + c);
swap(mask2[2],mask2[1]);
swap(mask2[0],mask2[1]);
mask2[0] = x;
return ret;
}
signed main() {
Blobo2
n=nxt();
cin>>s;
memset(dp,-1,sizeof dp);
int idx=1;
for(int A=0;A<4;A++){
for(int B=0;B<4;B++){
for(int C=0;C<4;C++){
mask3[A][B][C] = idx++;
}
}
}
cout<<solve();
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
127 ms |
307056 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
117 ms |
307064 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
113 ms |
307136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
124 ms |
307116 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
116 ms |
307060 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
129 ms |
307112 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
139 ms |
307148 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
145 ms |
307532 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
158 ms |
308068 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
275 ms |
309188 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
295 ms |
313380 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
587 ms |
315288 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |