#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <ll , ll> ii;
typedef pair <ll , ii> iii;
typedef pair <ii , ii> iiii;
#define fu(i,a,n) for(ll i = a ; i <= n ; i ++)
#define fd(i,a,n) for(ll i = a ; i >= n ; i --)
#define rep(it , a) for(auto &it : a)
#define bit(i , j) ((i >> j) & 1ll)
#define turn(i , j) (i ^ (1ll << j))
#define on(i , j) (i | (1ll << j))
#define off(i , j) (i & ~(1ll << j))
#define __lcm(a , b) ((1ll * a * b) / __gcd(a , b))
#define bit1(x) __builtin_popcountll(x)
#define sqr(x) ((x) * (x))
#define oo 1e18
#define fi first
#define se second
#define TASK "test"
template <class X , class Y>
bool maxz(X &a , const Y b)
{
if(a < b)
{
a = b;
return true;
}
return false;
}
template <class X , class Y>
bool minz(X &a , const Y b)
{
if(a > b)
{
a = b;
return true;
}
return false;
}
namespace MaxPhast
{
const ll N = 2e5 + 5;
ll n , ans;
ll a[N] , dp[N][4][4][4][4];
ll cost(ll a , ll b , ll c)
{
ll mask = (1 << a) | (1 << b) | (1 << c);
return bit1(off(mask , 0));
}
void solve()
{
cin >> n;
fu(i , 1 , n)
{
char c ; cin >> c;
if(c == 'M')
a[i] = 1;
else
if(c == 'F')
a[i] = 2;
else
a[i] = 3;
}
fu(i , 0 , n)
fu(x1 , 0 , 3)
fu(x2 , 0 , 3)
fu(y1 , 0 , 3)
fu(y2 , 0 , 3)
dp[i][x1][x2][y1][y2] = -oo;
dp[0][0][0][0][0] = 0;
fu(i , 1 , n)
{
ll mask = (1 << a[i]);
fu(x1 , 0 , 3)
{
fu(x2 , 0 , 3)
{
fu(y1 , 0 , 3)
{
fu(y2 , 0 , 3)
{
maxz(dp[i][x1][a[i]][y2][y1] , dp[i-1][x2][x1][y2][y1] + cost(x2 , x1 , a[i]));
maxz(dp[i][x2][x1][y1][a[i]] , dp[i-1][x2][x1][y2][y1] + cost(y2 , y1 , a[i]));
}
}
}
}
}
fu(x1 , 0 , 3)
fu(x2 , 0 , 3)
fu(y1 , 0 , 3)
fu(y2 , 0 , 3)
maxz(ans , dp[n][x1][x2][y1][y2]);
cout << ans;
}
}
signed main(){
ios :: sync_with_stdio(false) ; cin.tie(nullptr) ; cout.tie(nullptr);
if(fopen(TASK".INP" , "r"))
{
freopen(TASK".INP","r",stdin);
//freopen(TASK".OUT","w",stdout);
}
MaxPhast :: solve();
}
Compilation message (stderr)
miners.cpp: In function 'int main()':
miners.cpp:118:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
118 | freopen(TASK".INP","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |