牛客小白月赛2——文【排序,模拟】

本文介绍了一个简单的程序竞赛评分系统的实现方法。系统通过比较参赛者答案与标准答案来计算得分,并根据得分高低及姓名字典序选出最高分者。文章提供了完整的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述 

Sεlιнα(Selina) 开始了新一轮的男友海选。她要求她的男友要德智体美劳样样都全。首先进行的是文化知识竞赛。

Sεlιнα 精心准备了一套选择题,每个选择题有且只有一个正确答案。她邀请参赛男友们来答题,并回收了试卷准备批改。可是她却犯了愁。她不知道怎么快速地批改完这些试卷。她知道你是计算机大佬,就跑来请你写个程序帮她批改试卷。

Sεlιнα 会给你一份标准答案,再给你每个参赛男友的答卷。答卷中的每道题可能有一个答案, 也可能没有作答。你要做的是最后告诉 Sεlιнα 谁拿到了最高分,以及最高分的分数(分数为  分制)。Sεlιнα 喜欢优美的名字,所以如果有同样的分数,请告诉她其中字典序最小的选手名字。

不要偷懒哦!要是你告诉了 Sεlιнα 错误的答案,她会很生气的!

输入描述:


 

第一行两个整数 ,表示有 道选择题和 个参赛男友。第二行一个长为 的字符串,表示标准答案。其中第 个字母表示第 个选择题的答案。保证所有字母在  中。接下去 行,每两行表示一个参赛男友: 

 · 第一行一个字符串,表示参赛者姓名,保证姓名仅由大小写字母组成;

 · 第二行一个长为 的字符串,表示该参赛者的答案。其中第 个字母表示该参赛者对于第 个选择题的答案。保证所有字母在 中。 表示该参赛者未作答此题。

输出描述:


 

输出共两行,第一行是最高分的参赛男友姓名,第二行为其分数。

分数为 分制,保留两位小数。若有多人同分,输出字典序最小的姓名。 

示例1

输入

5 3
ADBBC
spiderman
ADBAC
niconico
BDXBC
ekstieks
ACBBC

输出

ekstieks
80.00

备注:

  姓名长度  
水题,定义一个结构体,简单的排序就好了,题目链接:题目链接

 

#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
struct node{
    char name[10001];
	char answer[200005];
    int score;
}temp[1005];
int cmp(const node &a,const node &b){
	if(a.score==b.score){
        return strcmp(a.name,b.name)<0;
	}
	return a.score>b.score;
}
int main(){
    int n,t;//n代表参赛男友的数量,t代表题目的数量
    int i,j;
    char string[100005];
    //priority_queue<node> que;
    scanf("%d%d",&n,&t);
    scanf("%s",string);
    for(i=0;i<t;i++){
    	scanf("%s",temp[i].name);
    	//getchar();
    	scanf("%s",temp[i].answer);
    	for(j=0;j<n;j++){
    		if(temp[i].answer[j]==string[j]){
    			temp[i].score++;
			}
		}
	}
	sort(temp,temp+t,cmp);
	printf("%s\n",temp[0].name);
	printf("%.2lf\n",temp[0].score*(100.0/n));
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值