PAT乙级 1058 选择题 (20分)

这里用的是最笨比的方法,也就是用getchar()吸收所有的空格和括号,以前想这么写没写出来,这次一次就写完了,情况考虑全面一点即可,然后同学答案和标准答案比较用的是比较vector的方法,感觉比较方便。

#include <cstdio>
#include <vector>
using namespace std;
struct answer{
    int score, num;
    vector<char> v;
}ans[110];
int main()
{
    int n, m, c1, num, wrong[110] = {}, max = 0;
    char c;
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= m; i++){
        scanf("%d%d%d", &ans[i].score, &c1, &ans[i].num);
        for(int j = 0; j < ans[i].num; j++){
            getchar();
            scanf("%c", &c);
            ans[i].v.push_back(c);
        }
    }
    for(int i = 0; i < n; i++){
        getchar();
        int score = 0;
        for(int j = 1; j <= m; j++){
            getchar();
            scanf("%d", &num);
            vector<char> vec;
            for(int k = 0; k < num; k++){
                getchar();
                scanf("%c", &c);
                vec.push_back(c);
            }
            if(vec == ans[j].v) score += ans[j].score;
            else wrong[j]++;
            if(wrong[j] > max) max = wrong[j];
            if(j < m) getchar(), getchar();
            else getchar();
        }
        printf("%d\n", score);
    }
    if(max == 0) printf("Too simple");
    else{
        printf("%d", max);
        for(int i = 1; i <= m; i++){
            if(wrong[i] == max) printf(" %d", i);
        }
    }
    return 0;
}
发布了30 篇原创文章 · 获赞 0 · 访问量 382

猜你喜欢

转载自blog.csdn.net/qq_33942309/article/details/104469584