Submission #1185871

#TimeUsernameProblemLanguageResultExecution timeMemory
1185871enzyMiners (IOI07_miners)C++20
84 / 100
1595 ms584 KiB
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
const int inf=1e9+7;
int v[maxn], dp[2][4][4][4][4]; // quais eram os ultimos dois ativos de cada mina
int main()
{
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int n; cin >> n;
    for(int i=1;i<=n;i++){
        char c; cin >> c;
        if(c=='M') v[i]=1;
        if(c=='B') v[i]=2;
        if(c=='F') v[i]=3;
    }
    for(int i=0;i<=1;i++)
        for(int i1=0;i1<=3;i1++)
            for(int i2=0;i2<=3;i2++)
                for(int j1=0;j1<=3;j1++)
                    for(int j2=0;j2<=3;j2++) 
                        dp[i][i1][i2][j1][j2]=-inf;
    dp[0][0][0][0][0]=0;
    int resp=0;
    for(int i=1;i<=n;i++)
        for(int i1=0;i1<=3;i1++)
            for(int i2=0;i2<=3;i2++)
                for(int j1=0;j1<=3;j1++)
                    for(int j2=0;j2<=3;j2++){
                        int j=i%2;
                        set<int>s1, s2; 
                        s1.insert(i1); s1.insert(i2); s1.insert(v[i]);
                        if(s1.count(0)) s1.erase(0);
                        s2.insert(j1); s2.insert(j2); s2.insert(v[i]);
                        if(s2.count(0)) s2.erase(0);
                        int t1=s1.size(), t2=s2.size();
                        dp[j][i2][v[i]][j1][j2]=max(dp[((j+1)%2)][i1][i2][j1][j2]+t1,dp[j][i2][v[i]][j1][j2]);
                        dp[j][i1][i2][j2][v[i]]=max(dp[((j+1)%2)][i1][i2][j1][j2]+t2,dp[j][i1][i2][j2][v[i]]);
                        resp=max({resp,dp[j][i2][v[i]][j1][j2],dp[j][i1][i2][j2][v[i]]});
                    }
    cout << resp << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...