题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805270356541440
这道题主要是把输入格式给搞定,思路是一个数组记录分数,一个数组记录正确答案,一个数组记录错误数量
中间输入的时候新建一个集合用来判断,大概用到的就是这些
另一个小技巧就是temp值可以反复赋值,如果之后用不到的话
代码
#include<cstdio>#include<vector>#include<set>using namespace std;int main(){int n, m, temp, k;scanf("%d%d", &n, &m);vector<set<char>> right(m);vector<int> total(m), wrongCnt(m);for(int i = 0; i < m; i++){scanf("%d%d%d", &total[i], &temp, &k);for(int j = 0; j < k; j++){char c;scanf(" %c", &c);right[i].insert(c);}}for(int i = 0; i < n; i++){int score = 0;scanf("\n");for(int j = 0; j < m; j++){if(j != 0) scanf(" ");scanf("(%d", &k);set<char> st;char c;for(int l = 0; l < k; l++){scanf(" %c", &c);st.insert(c);}scanf(")");if(st == right[j]){score += total[j];} else {wrongCnt[j]++;}}printf("%d\n", score);}int maxCount = 0;for(int i = 0; i < m; i++){if(wrongCnt[i] > maxCount) maxCount = wrongCnt[i];}if(maxCount == 0) printf("Too simple");else{printf("%d", maxCount);for(int i = 0; i < m; i++){if(wrongCnt[i] == maxCount)printf(" %d", i + 1);}}return 0;}
