#include <iostream>//1073
#include <cstdio>
#include <algorithm>
using namespace std;
double cj[1200];
struct stu{
int bian,fen,zq,z[10],d[10];//z[]储存正确选项,d[]储存错误次数
int maxn=0;
}a[110];
int comp(stu b,stu c)
{
if(b.maxn==c.maxn) return b.bian<c.bian;
return b.maxn>c.maxn;
}
int main()
{
int n,m,k,q;
char by;
cin>>n>>m;//初始化
for(int j=0;j<m;j++)
{
cin>>a[j].fen>>q>>a[j].zq;
for(int i=0;i<a[j].zq;i++)
{
cin>>by;
a[j].z[by-'a']++;
}
a[j].bian=j+1;
}
//计分
for(int wa=0;wa<n;wa++)
{
int mm,hh,qaq;//记录mm对的个数
for(int i=0;i<m;i++)//录题 i题目编号
{
mm=0;hh=0;//hh表示有没有错误选项mm表示对的个数
while(by=getchar())
{
if(by>='0'&&by<='9')
{
qaq=by-'0';
break;
}
}
for(int j=0;j<qaq;j++)
{
cin>>by;
if(a[i].z[by-'a'])
{
mm++;a[i].d[by-'a']++;
}
else
{
hh=1;a[i].d[by-'a']++;//不只是正确选项才有错的最多的资格!
}
}
if(hh||!mm) continue;
if(mm==a[i].zq) cj[wa]+=a[i].fen;
else cj[wa]+=a[i].fen*0.5;
}
printf("%.1f\n",cj[wa]);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<8;j++)
{
if(a[i].z[j])
{
a[i].d[j]=n-a[i].d[j];
// printf("%d-%c %d\n",a[i].bian,j+'a',a[i].d[j]);
}
if(a[i].maxn<a[i].d[j])
a[i].maxn=a[i].d[j];
}
}
sort(a,a+m,comp);
q=0;
while(q+1<m&&a[q+1].maxn==a[q].maxn)
q++; //记住加特判q+1<n防越界 !(不加段错误)
if(a[q].maxn==0) cout<<"Too simple"<<endl;
else
{
for(int i=0;i<=q;i++)
{
for(int j=0;j<=8;j++)
{
if(a[i].d[j]==a[q].maxn)
printf("%d %d-%c\n",a[q].maxn,a[i].bian,j+'a');
}
}
}
return 0;
}
pta1073乙题 选择题---就模拟没啥东西一步步来就行先成绩后再加错误判断
最新推荐文章于 2023-09-25 21:36:38 发布