Submission #114519

# Submission time Handle Problem Language Result Execution time Memory
114519 2019-06-01T14:45:34 Z zubec Miners (IOI07_miners) C++14
100 / 100
197 ms 384 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;


int n;

int dp[2][4][4][4][4];

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);

    cin >> n;
    int tt = 0;
    for (int t = 0; t < 2; t++){
        for (int i = 0; i < 4; i++){
            for (int j = 0; j < 4; j++){
                for (int ii = 0; ii < 4; ii++){
                    for (int jj = 0; jj < 4; jj++){
                        dp[t][i][j][ii][jj] = -1e9;
                    }
                }
            }
        }
    }
    dp[0][0][0][0][0] = 0;
    while(n--){
        char c;
        cin >> c;
        int cur = 0;
        if (c == 'M')
            cur = 1; else
        if (c == 'B')
            cur = 2; else
            cur = 3;
        for (int i = 0; i < 4; i++){
            for (int j = 0; j < 4; j++){
                for (int ii = 0; ii < 4; ii++){
                    for (int jj = 0; jj < 4; jj++){
                        dp[tt^1][i][j][ii][jj] = -1e9;
                    }
                }
            }
        }
        for (int i = 0; i < 4; i++){
            for (int j = 0; j < 4; j++){
                for (int ii = 0; ii < 4; ii++){
                    for (int jj = 0; jj < 4; jj++){
                        {
                            int a = i, b = j, c = cur;
                            if (a > b)
                                swap(a, b);
                            if (b > c)
                                swap(b, c);
                            if (a > b)
                                swap(a, b);
                            int kol = 1;
                            if (a != b && a != 0)
                                ++kol;
                            if (b != c && b != 0)
                                ++kol;
                            dp[tt^1][j][cur][ii][jj] = max(dp[tt^1][j][cur][ii][jj], dp[tt][i][j][ii][jj]+kol);
                        }
                        {
                            int a = ii, b = jj, c = cur;
                            if (a > b)
                                swap(a, b);
                            if (b > c)
                                swap(b, c);
                            if (a > b)
                                swap(a, b);
                            int kol = 1;
                            if (a != b && a != 0)
                                ++kol;
                            if (b != c && b != 0)
                                ++kol;
                            dp[tt^1][i][j][jj][cur] = max(dp[tt^1][i][j][jj][cur], dp[tt][i][j][ii][jj]+kol);
                        }
                    }
                }
            }
        }


        tt^=1;
    }

    int ans = 0;
    for (int i = 0; i < 4; i++){
        for (int j = 0; j < 4; j++){
            for (int ii = 0; ii < 4; ii++){
                for (int jj = 0; jj < 4; jj++){
                    ans = max(ans, dp[tt][i][j][ii][jj]);
                }
            }
        }
    }

    cout << ans;

}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 50 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 145 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 197 ms 376 KB Output is correct