牛客月赛G

链接: https://www.nowcoder.com/acm/contest/86/G
来源:牛客网

Sεlιнα(Selina) 开始了新一轮的男友海选。她要求她的男友要德智体美劳样样都全。首先进行的是文化知识竞赛。
Sεlιнα 精心准备了一套选择题,每个选择题有且只有一个正确答案。她邀请参赛男友们来答题,并回收了试卷准备批改。可是她却犯了愁。她不知道怎么快速地批改完这些试卷。她知道你是计算机大佬,就跑来请你写个程序帮她批改试卷。
Sεlιнα 会给你一份标准答案,再给你每个参赛男友的答卷。答卷中的每道题可能有一个答案, 也可能没有作答。你要做的是最后告诉 Sεlιнα 谁拿到了最高分,以及最高分的分数(分数为 分制)。Sεlιнα 喜欢优美的名字,所以如果有同样的分数,请告诉她其中字典序最小的选手名字。
不要偷懒哦!要是你告诉了 Sεlιнα 错误的答案,她会很生气的!

输入描述:

 
 
第一行两个整数 ,表示有 道选择题和 个参赛男友。第二行一个长为 的字符串,表示标准答案。其中第 个字母表示第 个选择题的答案。保证所有字母在  中。接下去 行,每两行表示一个参赛男友: 
 · 第一行一个字符串,表示参赛者姓名,保证姓名仅由大小写字母组成;
 · 第二行一个长为 的字符串,表示该参赛者的答案。其中第 个字母表示该参赛者对于第 个选择题的答案。保证所有字母在 中。 表示该参赛者未作答此题。

输出描述:

 
 
输出共两行,第一行是最高分的参赛男友姓名,第二行为其分数。
分数为 分制,保留两位小数。若有多人同分,输出字典序最小的姓名。
 
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
 
char ans[100005]; 
 
struct node
{
    string name;
    char a[100005];
    int sum;
}boy[105];
 
bool cmp(node a,node b)
{
    if(a.sum==b.sum)
    {
        return a.name<b.name;
    }
    return a.sum>b.sum;
}
 
int main()
{
    int m,n,i,j;
    cin>>n>>m>>ans;
    for(i=0;i<105;i++)
    {
        boy[i].sum=0;
    }
    for(i=0;i<m;i++)//m人
    cin>>boy[i].name>>boy[i].a;
    for(j=0;j<m;j++)//m人
    {
        for(i=0;i<n;i++)
        {
            if(boy[j].a[i]==ans[i])
            boy[j].sum++;
        }
    }
    sort(boy,boy+m,cmp);
    cout<<boy[0].name<<endl;
    printf("%.2f\n",boy[0].sum/(n*1.0)*100);
    return 0;
}
//AC
//也可以把结构体放进vector数组中 进行排序
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
string ans;
struct node
{
	string name;
	string a;
	int sum;
};
vector<node> boy;

bool cmp(node a,node b)
{
	if(a.sum==b.sum)
	return a.name<b.name;
	return a.sum>b.sum;
}
int main() 
{
	int m,n,i,j;
	cin>>n>>m>>ans;
	node st;
	for(i=0;i<m;i++)
	{
		cin>>st.name>>st.a;
		st.sum=0;
		boy.push_back(st);
	}
	for(j=0;j<m;j++)
	{
		int k=0;
		boy[j].sum=0;
		for(i=0;i<n;i++)
		{
			if(boy[j].a[i]==ans[i])
			k++;
		}
		boy[j].sum=k; 
	}
	sort(boy.begin(),boy.end(),cmp);
	cout<<boy[0].name<<endl;
	double t=boy[0].sum/(n*1.0);
	t*=100;
	printf("%.2lf\n",t);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41333844/article/details/80246719