C++NOIP模拟试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目一览
1.这也叫破译?(crack)
【题目描述】
NOIP吧是个很和谐的吧,一直为了OI事业而奋斗。但是,由于吧的日益壮大,各种矛盾还是避免不了。
这两天,传说中的NOIP吧官方群群主接到一封神秘而好笑的信。神秘在于信的表面有两个特别大的字——神秘(⊙﹏⊙b汗);好笑在于信的开头说,你一定猜不出这封信源自何处,结尾处署名CCF(⊙﹏⊙b汗)。
言归正传,CCF的信让老练的群主大吃一惊,觉得也没有招惹过CCF啊。信中说这封信的内容加密过了,你需要完成这封信上的任务,完成之后内容就会自然的显现了(这也叫破译?⊙﹏⊙b汗)。群主觉得这等小事何足挂齿,只是最近ACM那边很多事啊,所以交给你了。(什么?你要推脱?告诉你,群主是个愤青,impossible!!!)
信中给了n 个单词,每个单词都由小写字母构成。信的后面给了一个字母表,字母表如下:
a b c d e f g h i j k l m n o p q r s t u v w x y z
4 2
5
6 1 4 5 6
7 2 3 4
8
9 3 1 2 6 8 9 2 6 3 2 5 7
这些字母对应一个数字,暂且称作:权值。一个单词的权值定义为单词所含的字母的权值之和。你的任务是按权值降序(从大到小),(若权值相等,按字符串排序。注:两个字符串先输出长度大的,长度相同输出字典序大的,完全相同则直接输出)输出前m(1<=m<=n)个单词和单词的权值。
【输入格式】
输入文件crack.in包含n+1行;
第一行是整数n,m,表示单词的个数和所需输出的单词的个数;
第2~n+1行,每行一个单词。
【输出格式】
输出文件crack.out包含m行。
第1~m行,每行一个单词和一个权值,单词和权值之间用一个空格隔开。【输入样例】
10 10
noip
noi
ceoi
ctsc
apoi
usaco nocow
vijos
tyvj
【输出样例】ctsc 27 vijos 26 nocow 23 crack 23 usaco 22 tyvj 22 noip 20 noi 19 ceoi 16 apoi 15
【数据范围】
40%的数据满足:1<=n<=5000
80%的数据满足:1<=n<=20000
100%的数据满足:1<=n<=50000
[提交程序]
2、联络(contact)
【题目描述】
在成功破译了CCF的来信之后,NOIP群决定迎战CCF,但是现在面临一个问题,由于NOIP群的各位成员不在一起,所以现在要开始联系成员。在我们伟大的NOIP群里已经公示了CCF的来信,一些经常活动的成员得到消息并且已经联系到了部分成员,但是我们是一个组织,不能单独行动,因此必须要听从群主的号令,于是,必须所有成员都要能够直接或间接联系到群主才可以。为了保密,此次行动不采用网络方式联系,我们有一个只属于群内成员的特殊联系方式,这种方式最大的优点是保密功能极为强大,但是费用也不低,由于我们的经费有限,为了能留出更多的经费前往CCF,我们要在联系过程中尽量节省费用。你的任务就是编程计算出联系到所有成员的最少的费用以及得到最少费用的方式。
【输入格式】
第一行一个数n,代表一共要联系到的成员有n个,接下来一个n+1行有一个(n+1)*(n+1)的矩阵,第i+1行第j个数代表第i个人与第j个人联系的费用(群主编号为1),然后一个数m,接下来m行,每行两个数i和j,代表第i个人和第j个人已经相互联系到(数据保证没有环)。
【输出格式】
第一行一个数z,代表最小费用,接下来若干行,每行两个数x和y,代表要第x个人与第y个人相联系(按顺序输出)。
【样例输入】
4
0 1 2 3 7
1 0 4 6 10
2 4 0 5 9
3 6 5 0 8
7 10 9 8 0
2
4 5
2 5
【样例输出】
3
1 2
1 3
【数据范围】
对于40%的数据m 对于100%的数据m 数据保证输出不超过231-1。 [提交程序] 3、冲锋(charge) 【题目描述】 联络完毕的noip群战士们,终于等到了集结的号角。他们蜂拥而上,前往与CCF交锋的战场。 神龟已经准备好了一辆通往战场的列车,按照他的计划,这个列车将能容纳最多C个战士,当然他希望这C个战士总战斗力最强。 不幸的是,由于组织者没有进行合理的秩序安排,战士们在通往战场的列车前挤成了一个大堆;由于时间和空间关系,神龟已经无法对战士按照战斗力重新列队,只能从这一堆人中靠前的挑选战士。 我们可以将noip群战士们挤成的一个堆抽象成一个树的模型;树的根就是列车。一个战士可以进入列车,当且仅当他到列车上的路径中的战士已经全部进入了列车。当然,神龟已经在列车上等待大家了(我们可以认为他,也就是树根,是0号节点),他可是拥有4千万战斗力的勇士呢。 现在请你帮神龟计算,他最多可以带上多少战斗力的勇士。 【输入格式】 第一行包括两个数n,C,分别代表战士的总人数和列车上能容纳的战士数。 第2~n+1行每行描述了一个战士,分别代表该战士之前的战士(树中的父节点)的编号xi,和这个战士的战斗力wi。 【输出格式】 只有一行,列车最多可以带的勇士的战斗力之和。 【输入样例】 7 5 2 2 0 1 0 4 2 1 7 1 7 6 2 2 【输出样例】 40000013 【数据范围】 对于20%的数据,1<=n,c<=50;