pta1073乙题 选择题---就模拟没啥东西一步步来就行先成绩后再加错误判断

#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;   	
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值