Submission #1253900

#TimeUsernameProblemLanguageResultExecution timeMemory
1253900minhtan1103Miners (IOI07_miners)C++20
100 / 100
401 ms656 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxN = 1e5 + 5;

int n;
string s;
int dp[2][4][4][4][4];

int calc(int x, int y, int z){
    set<int> food = {x, y, z};
    int ans = food.size();
    if (x == 0 || y == 0 || z == 0) --ans;
    return ans; 
}

int poinT(char x){
    if (x == 'M') return 1;
    if (x == 'F') return 2;
    return 3;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    if (fopen("TASK.inp", "r")){
        freopen("TASK.inp", "r", stdin);
        freopen("TASK.out", "w", stdout);
    }
    cin >> n >> s;
    s = " " + s;
    memset(dp, -1, sizeof(dp));
    dp[0][0][0][0][0] = 0;
    for (int i = 1; i <= n; ++i){
        int x = poinT(s[i]);
        int curr = i%2, prev = 1-curr;

        memset(dp[curr], -1, sizeof(dp[curr]));

        for (int j = 0; j < 4; ++j) for (int k = 0; k < 4; ++k) for (int l = 0; l < 4; ++l) for (int m = 0; m < 4; ++m){
            if (dp[prev][j][k][l][m] == -1) continue;
            dp[i%2][x][j][l][m] = max(dp[i%2][x][j][l][m], dp[1-i%2][j][k][l][m] + calc(x, j, k));
            dp[i%2][j][k][x][l] = max(dp[i%2][j][k][x][l], dp[1-i%2][j][k][l][m] + calc(x, l, m));
        }
    }
    int ans = 0;
    for (int i = 0; i < 4; ++i) for (int j = 0; j < 4; ++j) for (int k = 0; k < 4; ++k) for (int l = 0; l < 4; ++l){
        ans = max(ans, dp[n%2][i][j][k][l]);
    }
    cout << ans;

    return 0;
}

Compilation message (stderr)

miners.cpp: In function 'int main()':
miners.cpp:28:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |         freopen("TASK.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
miners.cpp:29:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 |         freopen("TASK.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...