一次就过,开心!
注意读字符的时候,空格和回车都会被读入,要特殊处理一下。
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
struct pro{
int f,fn,rn;//满分,总选项个数,正确选项个数
char str[6]; //正确选项内容
int wrong,no;//错的人数 ,编号
};
int hash[110]={0};
bool cmp(pro a, pro b){
if(a.wrong!=b.wrong) return a.wrong >b.wrong;
else return a.no < b.no;
}
int main(){
int N,M,f,fn,rn;
char c;
pro temp;
vector<pro> v;
v.clear();
scanf("%d%d",&N,&M);
for(int i=0;i<M;i++){
scanf("%d%d%d",&f,&fn,&rn);
temp.f=f;
temp.fn=fn;
temp.rn=rn;
temp.no=i+1;
int j;
for(j=0;j<rn;j++){
scanf(" %c",&c);
temp.str[j]=c;
}
temp.str[j]='\0';
v.push_back(temp);
}
int x,single,maxw=0;
char s[6];
for(int i=0;i<N;i++){
single=0;
for(int j=0;j<M;j++){
scanf(" (%d",&x);
int k;
for(k=0;k<x;k++){
scanf(" %c",&c);
s[k]=c;
}
s[k]='\0';
if(strcmp(v[j].str,s)==0){
single+=v[j].f;
}else{
v[j].wrong++;
if(v[j].wrong > maxw) maxw=v[j].wrong;
}
scanf("%c",&c);
}
printf("%d\n",single);
}
if(maxw==0) {
printf("Too simple\n");
return 0;
}
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++){
if(v[i].wrong == maxw) {
if(i==0) printf("%d",v[i].wrong);
printf(" %d",v[i].no);
}
else break;
}
printf("\n");
return 0;
}