全国信息学奥林匹克联赛(NOIP2015)复赛模拟
提高组
(请选手务必仔细阅读本页内容)
一、题目概况
中文题目名称 |
足球联赛 |
最短路径 |
阿 Q 的停车场 |
||||||
英文题目名称 |
soccer |
paths |
park |
||||||
可执行文件名 |
soccer |
paths |
park |
||||||
输入文件名 |
soccer.in |
paths.in |
park.in |
||||||
输出文件名 |
soccer.out |
paths.out |
park.out |
||||||
每个测试点时限 |
1 秒 |
1 秒 |
1 秒 |
||||||
测试点数目 |
20 |
20 |
20 |
||||||
每个测试点分值 |
5 |
5 |
5 |
||||||
附加样例文件 |
有 |
有 |
有 |
||||||
题目类型 |
传统 |
传统 |
传统 |
||||||
二、提交源程序文件名 |
|||||||||
对于 pascal 语言 |
soccer.pas |
paths.pas |
park.pas |
||||||
对于 C 语言 |
soccer.c |
paths.c |
park.c |
||||||
对于 C++语言 |
soccer.cpp |
paths.cpp |
park.cpp |
||||||
三、编译命令(不包含任何优化开关) |
|||||||||
对于 pascal 语言 |
fpc soccer.pas |
fpc paths.pas |
fpc park.pas |
||||||
对于 C 语言 |
gcc –o soccer |
gcc –o paths |
gcc –o park |
||||||
soccer.c -lm |
paths.c -lm |
park.c -lm |
|||||||
对于 C++语言 |
g++ -o soccer |
g++ -o paths |
g++ -o park |
||||||
soccer.cpp -lm |
paths.cpp -lm |
park.cpp -lm |
|||||||
四、运行内存限制 |
|||||||||
内存上限 |
256M |
256M |
256M |
五、注意事项
1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。3、全国统一评测时采用的机器配置为:CPU 2.19GHz,内存 2G,上述时限以此配置为准。各省在自测时可根据具体配置调整时限。
1.足球联赛
(soccer.pas/c/cpp)
【问题描述】
巴蜀中学新一季的足球联赛开幕了。足球联赛有 n 只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得 3 分,输一场不得分,平局两只队伍各得一分。
英勇无畏的小鸿是机房的主力前锋,她总能在关键时刻踢出一些匪夷所思的妙球。但是很可惜,她过早的燃烧完了她的职业生涯,不过作为一个能够 Burning 的 girl,她的能力不止如此,她还能预测这个赛季所有球队的比赛结果。
虽然她能准确预测所有比赛的结果,但是其实她不怎么厉害,Mr.Gao 上数学课时她总是在 sleep,因此她的脑里只有整数没有实数,而且,她只会 10 以内非负整数的加法运算,因此她只有结果却无法知道谁会获得联赛的冠军。
小鸿想给冠军队伍的所有队员一个拥抱,所以她把计算结果的任务交给了你:
现在,给你一个 n*n 的矩阵表示比赛情况。第 i 行第 j 列的字母表示在第 i 只队伍在主场迎战第 j 只队伍的比赛情况,W 表示主队赢,L 表示主队输,D 表示平局。现在需要你给出最后能得到小鸿拥抱的队伍编号,如有多支队伍分数最高,按字典序输出编号。
【输入格式】
第一行一个整数 n。
接下来 n 行,每行 n 个字符,表示输赢情况。
第 i 行第 i 列为 - ,因为一只队伍不可能与自己比赛。
【输出格式】
输出得分最高的队伍编号。如有多个在一行中输出,用一个空格分开。
【样例输入输出 1】
soccer.in |
soccer.out |
3 |
1 2 3 |
-WW |
|
W-W |
|
WW- |
|
【样例输入输出 2】 |
|
soccer.in |
soccer.out |
5 |
1 |
-DWWD |
|
L-WLL |
|
DD-WD |
|
DDL-L |
|
DDLL- |
【数据范围】
对于 40%的数据,满足 N<=20
对于 100%的数据,满足 N<=50
2.最短路径
(paths.pas/c/cpp)
【问题描述】
平面内给出 n 个点,记横坐标最小的点为 A,最大的点为 B,现在小 Y 想要知道在每个点经过一次(A 点两次)的情况下从 A 走到 B,再回到 A 的最短路径。但他是个强迫症患者,他有许多奇奇怪怪的要求与限制条件:
1.从 A 走到 B 时,只能由横坐标小的点走到大的点。
2.由 B 回到 A 时,只能由横坐标大的点走到小的点。
3.有两个特殊点 b1 和 b2, b1 在 0 到 n-1 的路上,b2 在 n-1 到 0 的路上。请你帮他解决这个问题助他治疗吧!
【输入格式】
第一行三个整数 n,b1,b2,( 0 < b1,b2 < n-1 且 b1 <> b2)。n 表示点数,从 0 到 n-1 编
号,b1 和 b2 为两个特殊点的编号。
以下 n 行,每行两个整数 x、y 表示该点的坐标(0 <= x,y <= 2000),从 0 号点顺序给出。Doctor Gao 为了方便他的治疗,已经将给出的点按 x 增序排好了。
【输出格式】
输出仅一行,即最短路径长度(精确到小数点后面 2 位)
【样例输入输出】
paths.in |
paths.out |
5 1 3 |
18.18 |
1 3 |
|
3 4 |
|
4 1 |
|
7 5 |
|
8 3 |
【样例解释】
最短路径:0->1->4->3->2->0
【数据范围】
20%的数据 n<=20
60%的数据 n<=300
100%的数据 n<=1000
对于所有数据 x,y,b1,b2 如题目描述.
3.阿 Q 的停车场
(park.pas/c/cpp)
【问题描述】
刚拿到驾照的 KJ 总喜欢开着车到处兜风,玩完了再把车停到阿 Q 的停车场里,虽然她对自己停车的水平很有信心,但她还是不放心其他人的停车水平,尤其是 Kelukin。于是,她每次都把自己的爱车停在距离其它车最远的一个车位。KJ 觉得自己这样的策略非常科学,于是她开始想:在一个停车场中有一排车位,从左到右编号为 1 到 n,初始时全部是空的。有若干汽车,进出停车场共 m 次。对于每辆进入停车场的汽车,会选择与其它车距离最小值最大的一个车位,若有多个符合条件,选择最左边一个。KJ 想着想着就睡着了,在她一旁的 Kelukin 想帮她完成这个心愿,但是他又非常的懒,不愿意自己动手,于是就把这个问题就留给了你:在 KJ 理想的阿 Q 的停车场中,给你车辆进出的操作序列,依次输出每辆车的车位编号。
【输入说明】
第一行,两个整数 n 和 m,表示停车场大小和操作数;接下来 m 行,每行两个整数 F 和 x F 是 1 表示编号为 x 的车进停车场; F 是 2 表示编号为 x 的车出停车场;保证操作合法,即:出停车场的车一定目前仍在停车场里;停车场内的车不会超过 n;
【输出说明】
对于所有操作 1,输出一个整数,表示该车车位的编号。
【样例输入输出】
park.in |
park.out |
7 11 |
1 |
1 15 |
7 |
1 123123 |
4 |
1 3 |
2 |
1 5 |
7 |
2 123123 |
4 |
2 15 |
1 |
1 21 |
3 |
2 3 |
|
1 6 |
|
1 7 |
|
1 8 |
【数据范围】
0 30%的数据 n<=1000 ,m<=1000
0 60%的数据 n<=200000,m<=2000
0 100%的数据 n,m<=200000,车的编号小于等于 10^6