首页 > 解决方案 > 我的代码在标准输入中显示 4(Coreect),在 USACO 分级机中显示 5645,在 scanf/printf 中显示 1862013874。问题是什么?

问题描述

这是带有 scanf/printf 的 C++ 代码。我使用文件 I/O 运行它,但在我的笔记本电脑上使用 cin/cout 以及命令行 cin/cout。两者都工作得很好。USACO 分级机也没有与这两个一起工作。scanf/printf 也不起作用。(请帮忙,我知道这可能是一个愚蠢的错误)。

#include <cstdio>
#include <cassert>
#include <algorithm>

using namespace std;
using ll = long long;

int main(){
    int n, k;
    scanf("%d", &n);
    scanf("%d", &k);
    char s[10];

    int gestures[n+1], dp[n+1][k+1][3];
    for (int i = 1; i <= n; i++){
        scanf("%s", s);
        if (s[0]=='H') gestures[i] = 0;
        else if (s[0]=='P') gestures[i] = 1;
        else gestures[i] = 2;
    }
    int res = 0;
    for (int i = 1; i <= n; i++){
        for (int s = 0; s <= k; s++){
            for (int p1 = 0; p1 < 3; p1++){
                if (n){
                    dp[i][s][p1] = max(dp[i-1][s-1][(p1+1)%3], dp[i][s][p1]);
                    dp[i][s][p1] = max(dp[i-1][s-1][(p1+2)%3], dp[i][s][p1]);
                }
                dp[i][s][p1] = max(dp[i-1][s][p1], dp[i][s][p1]);
                dp[i][s][p1] += (p1==gestures[i]);
                if (i==n) res = max(res, dp[i][s][p1]);
            }
        }
    }
    printf("%d\n", res);
}

标签: c++

解决方案


推荐阅读