链接:https://www.nowcoder.com/acm/contest/86/G
来源:牛客网
题目描述
Sεlιнα(Selina) 开始了新一轮的男友海选。她要求她的男友要德智体美劳样样都全。首先进行的是文化知识竞赛。
Sεlιнα 精心准备了一套选择题,每个选择题有且只有一个正确答案。她邀请参赛男友们来答题,并回收了试卷准备批改。可是她却犯了愁。她不知道怎么快速地批改完这些试卷。她知道你是计算机大佬,就跑来请你写个程序帮她批改试卷。
Sεlιнα 会给你一份标准答案,再给你每个参赛男友的答卷。答卷中的每道题可能有一个答案, 也可能没有作答。你要做的是最后告诉 Sεlιнα 谁拿到了最高分,以及最高分的分数(分数为 分制)。Sεlιнα 喜欢优美的名字,所以如果有同样的分数,请告诉她其中字典序最小的选手名字。
不要偷懒哦!要是你告诉了 Sεlιнα 错误的答案,她会很生气的!
输入描述:
第一行两个整数 ,表示有 道选择题和 个参赛男友。第二行一个长为 的字符串,表示标准答案。其中第 个字母表示第 个选择题的答案。保证所有字母在 中。接下去 行,每两行表示一个参赛男友:
· 第一行一个字符串,表示参赛者姓名,保证姓名仅由大小写字母组成;
· 第二行一个长为 的字符串,表示该参赛者的答案。其中第 个字母表示该参赛者对于第 个选择题的答案。保证所有字母在 中。 表示该参赛者未作答此题。
输出描述:
输出共两行,第一行是最高分的参赛男友姓名,第二行为其分数。
分数为 分制,保留两位小数。若有多人同分,输出字典序最小的姓名。
输入例子:
5 3
ADBBC
spiderman
ADBAC
niconico
BDXBC
ekstieks
ACBBC
输出例子:
ekstieks
80.00
-->
备注:
姓名长度
思路:
模拟题,其实不用set也可以,用一个 name 和 value 储存即可。
AC码:
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
using namespace std;
char cor[+],ans[+];
int main(){
// testin("data.in"); int n,m;
cin>>n>>m;
scanf("%s",cor);
set<pair<string,int> > rank;
string name;
int sum=;
for(int i=;i<m;i++){
sum=;
cin>>name;
scanf("%s",ans);
if(strcmp(cor,ans)==)
sum=n;
else{
for(int j=;j<n;j++)
if(cor[j]==ans[j]) sum++;
} // debug_b(name),debug_l(sum); if(rank.size()== || sum>rank.begin()->second){
rank.clear();
rank.insert(make_pair(name,sum));
}
if(sum==rank.begin()->second)
rank.insert(make_pair(name,sum));
} cout<<rank.begin()->first<<endl;
printf("%.2f\n",1.0* rank.begin()->second / n*);
return ;
}