7-1 好!很有精神! (10分)
海军学校四年级学生衡量一年级学生是否能开军舰靠的是精神值。
精神值的计算公式如下:
value=timesD∗length
其中的value代表的的是一年级学生的精神值,D代表一年级学生说话声音的分贝,length记录的是说话的句子长度,times记录的是说话的时间。
而他们会按照如下方式对一年级学生进行测试:在单位时间内(即times=1)让一年级学生依次进行自我介绍,同时记录他们说话声音的分贝,和自我介绍的内容。
现在四年级学生们已经采集了所有一年级学生的数据,他们想请你找到一年级学生里最有精神的学生(即value最大的学生),并让他开军舰。现在请你帮帮忙。
输入格式
第一行一个正整数n(1≤n≤2⋅104),代表一年级学生的人数。
接下来n行,每行输入格式如下:
name D introdutction
其中name
为一个长度不超过20的字符串(即1≤∣name∣≤20),D为正整数,且0≤D≤200,introduction
为长度不超过100的字符串(即1≤∣introduction∣≤100)。
所有的字符串仅由小写的英文字母组成
输出格式
输出共两行,第一行输出最大的精神值。
第二行按照如下格式输出
XXX:hao!hen you jing shen!
其中XXX请替换成精神值最大的一年级学生的名字。
如果有多个精神值最大的学生,请按照输入顺序依此按上述格式输出一年级学生的名字。
输入样例
1
pingtianyilang 0 aaaaaaa
输出样例
0
pingtianyilang:hao!hen you jing shen!
提示
对于样例,最有精神的学生是pingtianyilang
,其精神值为0×6=0
//最后两个测试点答案错误
#include<iostream>
#include<queue>
#include<map>
using namespace std;
int main() {
map<string, long long> p;
map<string, long long>::iterator it,that;
queue<map<string, long long>::iterator > q;
long long n;
cin>>n;
string name,word;
long long d;
cin>>name>>d>>word;
p[name] = d*word.length();
it = p.find(name);
q.push(it);
while(--n) {
cin>>name>>d>>word;
p[name] = d*word.length();
it = p.find(name);
that = q.back();
if(it->second>that->second) {
while(q.empty() == false)
q.pop();
q.push(it);
} else if(it->second == that->second) {
q.push(it);
}
}
while(q.empty() == false) {
it = q.front();
cout<<it->second<<endl;
cout<<it->first<<":hao!hen you jing shen!"<<endl;
q.pop();
}
}
7-2 日期问题 (20分)
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非 常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期 与其对应。
比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入格式:
一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)
输出格式:
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。
输入样例:
在这里给出一组输入。例如:
02/03/04
输出样例:
在这里给出相应的输出。例如:
2002-03-04
2004-02-03
2004-03-02
7-3 是不是顺子 (25分)
本题目要求对读入的五张Poker牌进行判断:它是否是一个正常的顺子。 说明:34567890JQKA2wW相信大家知道一二,为简化操作,0代表10,w和W代表小王和大王,大,小王可代替任意的牌哟。编程判断输入的五张牌是否会构成一个顺子(方案多个时,输出较大的,34567和0JQKA分别是最小和最大的顺子)
输入格式:
输入用五个字符代表的五张牌,系统确保输入的数据无误,但并不一定是有序排列。
输出格式:
输出这五张牌组成的顺子或输出空表示不是顺子,注意大小王可当任意的牌使用,输出的顺子要求是最大的一个,且升序排列(如果有的话)。
输入样例1:
A0KJw
输出样例1:
[0JQKA]
输入样例2:
A3452
输出样例2:
[]
7-4 旅行前的准备 (25分)
LX同学想要游遍整个中国甚至全世界!所以这个国庆假期她计划去长沙玩。但是在她做旅行前的准备的时候,她收到了老师的作业,并且要求在国庆假期结束之前上交!LX同学非常的生气,告诉了你这个消息。你也觉得实在是太过分了,但是没有办法,只好帮助LX同学完成她的作业。
老师给了LX同学两个整数,分别是 x 和 y 。每次LX同学可以从中选择一个数 num ,把这个数变成 (num+2) mod p 或 (num∗2) mod p 或 (num∗num) mod p ,请问,最少需要多少次操作,能使这两个整数相等。
输入格式:
一行三个正整数 x,y,p(3≤p≤106,1≤x,y<p) ,保证p 是一个奇数。
输出格式:
一行一个整数表示最少操作次数。
样例1
输入样例
3 4 5
输出样例
1
样例2
输入样例
2 3 5
输出样例
2
提示
样例一解释:3∗3≡4(mod5) 。
样例二解释:3∗2≡1(mod5) ,1∗2≡2(mod5) 。
7-5 基于词频的文件相似度 (30分)
实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。
输入格式:
输入首先给出正整数N(≤100),为文件总数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#
,表示文件结束。在N个文件内容结束之后,给出查询总数M(≤104),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。
输出格式:
针对每一条查询,在一行中输出两文件的相似度,即两文件的公共词汇量占两文件总词汇量的百分比,精确到小数点后1位。注意这里的一个“单词”只包括仅由英文字母组成的、长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。单词间以任何非英文字母隔开。另外,大小写不同的同一单词被认为是相同的单词,例如“You”和“you”是同一个单词。
输入样例:
3
Aaa Bbb Ccc
#
Bbb Ccc Ddd
#
Aaa2 ccc Eee
is at Ddd@Fff
#
2
1 2
1 3
输出样例:
50.0%
33.3%