列表

详情


NC15521. 文

描述

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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 300ms, 内存消耗: 740K, 提交时间: 2019-09-21 22:38:01

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n,m;string right;string name;int score=-1;
	cin>>n>>m>>right;
	while(m--)
	{
		string na,ans;int count=0;
		cin>>na>>ans;
		for(int i=0;i<n;i++)
		{
			if(ans[i]==right[i]) count++;
		}
		if(count>score)
		{
			score=count;
			name=na;
		}
		else if(count==score)
		{
			if(na<name) name=na;
		}
	}
	cout<<name<<endl;
	printf("%.2lf\n",score*1.0/n*100); 
	return 0;
}

C++(clang++11) 解法, 执行用时: 210ms, 内存消耗: 712K, 提交时间: 2020-11-04 21:32:45

#include<iostream>
using namespace std;
int n,m,cnt=-1,now;
string s,t,name,ans;
double point;
int main(){
	cin>>n>>m;
	cin>>s;
	for(int i=1;i<=m;i++){
		cin>>name;
		cin>>t;
		now=0;
		for(int j=0;j<s.length();j++){
			if(s[j]==t[j]){
				now++;
			}
		}
		if(now>cnt){
			cnt=now;
			ans=name;
		}
		else if(now==cnt&&name<ans){
			ans=name;
		}
	}
	point=100.0/n*cnt;
	cout<<ans<<"\n";
	printf("%.2f\n",point);
}

pypy3(pypy3.6.1) 解法, 执行用时: 399ms, 内存消耗: 25428K, 提交时间: 2020-02-06 14:45:16

n,m=map(int,input().split())
s=input()
name='zzzzzzz'
score=0
for i in range(m):
    nn=input()
    ss=input()
    cnt=0
    for j in range(n):
        if ss[j]==s[j]:
            cnt+=1
    if cnt == score and nn < name:
        name=nn
    if cnt>score:
        name=nn
        score=cnt
print(name)
ans=score*100.0/n
print('%.2f' % ans)

Python(2.7.3) 解法, 执行用时: 1793ms, 内存消耗: 3636K, 提交时间: 2018-04-21 19:08:52

n, m = map(int, raw_input().split())
a = raw_input()
bf = []
for _ in xrange(m):
    name, ans = raw_input(), raw_input()
    bf.append((name, len([1 for i in xrange(n) if a[i] == ans[i]])))
bf.sort(key = lambda x: x[0])
bf.sort(key = lambda x: x[1], reverse = True)
print bf[0][0]
print '%.2f' % (bf[0][1] * 100 / float(n))

Python3(3.5.2) 解法, 执行用时: 1670ms, 内存消耗: 12180K, 提交时间: 2019-08-12 15:45:47

n, m = map(int, input().split())
t = input()
c, a = -1, ''
while m > 0:
    m -= 1
    x, y = input(), input()
    cc = 0
    for i in range(n):
        if y[i] == t[i]:
            cc += 1
    if cc > c or (cc == c and x < a):
        c, a = cc, x
print(a)
print('%.2f' % (100.0*c/n))

上一题