#include <bits/stdc++.h>
using namespace std;
struct q
{
int full,all,right,wrong,num;//分值,总选项数,对的选项数,错的次数,题号
char ans[5]={0};//对的选项设置为1
};
bool cmp(q a,q b)//写错的人越多的题越靠前,若排序后最靠前的没有一个人错则全对
{
if(a.wrong==b.wrong)
return a.num<b.num;
else
return a.wrong>b.wrong;
}
int main()
{
int n_s,n_q;
cin>>n_s>>n_q;//总学生数,总问题数
int stu[n_s]={0};//学生得分
vector<q> a(n_q);//题目
char t;
//输入题目信息
for(int i=0;i<n_q;i++){
cin>>a[i].full>>a[i].all>>a[i].right;
a[i].wrong=0;
a[i].num=i+1;
for(int j=0;j<a[i].right;j++){
cin>>t;
a[i].ans[t-'a']=1;
}
}
//处理学生答案
int n;
for(int i=0;i<n_s;i++){
for(int j=0;j<n_q;j++){
cin>>t>>n;//吸收'(',输入该题学生选了几项
int cnt=0;
for(int k=0;k<n;k++){
cin>>t;
if(a[j].ans[t-'a']==1)
cnt++;
}
if(cnt==a[j].right&&cnt==n)//防止学生多选中蒙对正确答案
stu[i]+=a[j].full;
else
a[j].wrong++;
cin>>t;//t吸收')'
}
}
//输出答案
for(int i=0;i<n_s;i++)
cout<<stu[i]<<endl;
sort(a.begin(),a.end(),cmp);
if(a[0].wrong==0)
cout<<"Too simple";
else{
cout<<a[0].wrong;
for(int i=0;a[i].wrong==a[0].wrong;i++)
cout<<' '<<a[i].num;
}
return 0;
}
PAT乙级 1058 选择题
最新推荐文章于 2021-03-12 01:21:59 发布