11.08

全国信息学奥林匹克联赛(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

【问题描述】

巴蜀中学新一季的足球联赛开幕了。足球联赛有只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得分,输一场不得分,平局两只队伍各得一分。

英勇无畏的小鸿是机房的主力前锋,她总能在关键时刻踢出一些匪夷所思的妙球。但是很可惜,她过早的燃烧完了她的职业生涯,不过作为一个能够 Burning  girl,她的能力不止如此,她还能预测这个赛季所有球队的比赛结果。

虽然她能准确预测所有比赛的结果,但是其实她不怎么厉害,Mr.Gao 上数学课时她总是在 sleep,因此她的脑里只有整数没有实数,而且,她只会 10 以内非负整数的加法运算,因此她只有结果却无法知道谁会获得联赛的冠军。

小鸿想给冠军队伍的所有队员一个拥抱,所以她把计算结果的任务交给了你:

现在,给你一个 n*n 的矩阵表示比赛情况。第行第列的字母表示在第只队伍在主场迎战第只队伍的比赛情况,表示主队赢,表示主队输,表示平局。现在需要你给出最后能得到小鸿拥抱的队伍编号,如有多支队伍分数最高,按字典序输出编号。

   【输入格式】

第一行一个整数 n。

接下来,每行个字符,表示输赢情况。

行第列为 - ,因为一只队伍不可能与自己比赛。

【输出格式】

输出得分最高的队伍编号。如有多个在一行中输出,用一个空格分开。

【样例输入输出 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

【问题描述】

平面内给出个点,记横坐标最小的点为 A,最大的点为 B,现在小想要知道在每个点经过一次(点两次)的情况下从走到 B,再回到的最短路径。但他是个强迫症患者,他有许多奇奇怪怪的要求与限制条件:

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 表示点数,从 n-1 

号,b1  b2 为两个特殊点的编号。

以下行,每行两个整数 x、y 表示该点的坐标(0 <= x,y <= 2000),从号点顺序给出。Doctor Gao 为了方便他的治疗,已经将给出的点按增序排好了。

【输出格式】

输出仅一行,即最短路径长度(精确到小数点后面位)

【样例输入输出】

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 总喜欢开着车到处兜风,玩完了再把车停到阿的停车场里,虽然她对自己停车的水平很有信心,但她还是不放心其他人的停车水平,尤其是 Kelukin。于是,她每次都把自己的爱车停在距离其它车最远的一个车位。KJ 觉得自己这样的策略非常科学,于是她开始想:在一个停车场中有一排车位,从左到右编号为 n,初始时全部是空的。有若干汽车,进出停车场共次。对于每辆进入停车场的汽车,会选择与其它车距离最小值最大的一个车位,若有多个符合条件,选择最左边一个。KJ 想着想着就睡着了,在她一旁的 Kelukin 想帮她完成这个心愿,但是他又非常的懒,不愿意自己动手,于是就把这个问题就留给了你:在 KJ 理想的阿的停车场中,给你车辆进出的操作序列,依次输出每辆车的车位编号。

【输入说明】

第一行,两个整数 m,表示停车场大小和操作数;接下来行,每行两个整数 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

原文地址:https://www.cnblogs.com/TheRoadToAu/p/7804005.html