这里用的是最笨比的方法,也就是用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;
}