https://pintia.cn/problem-sets/994805260223102976/problems/994805270356541440
有点难,做了1小时18分钟。需要注意细节。
#include<iostream>
#include<algorithm>
using namespace std;
struct que{
int score;
int all;
int right;
string str;
int wrong=0;
}ques[100];
struct stu{
int score;
string str[100];
}stus[1000];
int main() {
char ch;
int n, m, nouse, flag, k, max=0, p=0, wrong[100];
cin >> n >> m;
for(int i=0; i<m; i++){
cin >> ques[i].score >> ques[i].all >> ques[i].right;
for(int j=0; j<ques[i].right; j++){
cin >> ch;
ques[i].str += ch;
}
}
cin.clear();
cin.ignore();
// 对于每一个学生
for(int i=0; i<n; i++){
flag = 0;
k = 0; // 题号从0开始
while(cin.peek()!='\n'){
cin >> ch;
if(ch == '(' && flag == 0){
flag = 1;//开始了
}else if(ch == ')' && flag == 1){
flag = 0;//结束了
if(stus[i].str[k] != ques[k].str){// 如果对了
ques[k].wrong ++;
if(ques[k].wrong > max){
max = ques[k].wrong;
p=0;
wrong[p] = k+1;
}else if(ques[k].wrong == max){
p ++;
wrong[p] = k+1;
}
}else{// 如果错了
stus[i].score += ques[k].score;
}
k ++;
}else if(ch >= 'a' && ch <= 'z' && flag == 1){
stus[i].str[k] += ch;
}
}
cin.clear();
cin.ignore();
cout << stus[i].score << endl;
}
if(max == 0){
cout << "Too simple" << endl;
}else{
cout << max << " ";
sort(wrong, wrong+p+1);
for(int i=0; i<p+1; i++){
cout << wrong[i];
if(i<p)
cout << " ";
}
}
return 0;
}