链接:
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; }