比赛时间:2011年4月16日8:00至12:00
题目名称 |
迷宫密码 |
重重机关 |
开心农场 |
武林大会 |
源文件名 |
sum.pas/c/cpp |
maze.pas/c/cpp |
farm.pas/c/cpp |
match.pas/c/cpp |
输入文件名 |
sum.in |
maze.in |
farm.in |
match.in |
输出文件名 |
sum.out |
maze.out |
farm.out |
match.out |
试题类型 |
传统型 |
传统型 |
传统型 |
传统型 |
满分 |
100 |
100 |
100 |
100 |
是否有部分分 |
否 |
否 |
否 |
否 |
时限 |
1秒 |
1秒 |
1秒 |
1秒 |
内存限制 |
128M |
128M |
128M |
128M |
注意事项
1. 务必看清题目,严格按照所要求的格式输入、输出。
2. 在调试程序时请先使用题目中的示例数据,然后再自行设计多组测试数据进行调试。
3. 测试有严格的时间限制,请尽可能优化算法。
4. 命名规则:
(1)每题都规定了该题的英文名称。
(2)程序文件和数据文件的主文件名都是该题的英文名字。
(3)程序文件扩展名采用语言环境的默认扩展名。
(4)数据文件都是文本文件,输入和输出文件的扩展名分别是.in和.out。
5. 程序应从输入文件读取数据,并严格地按照规定的输出格式将结果输出到输出文件中。输入数据文件和输出数据文件都与程序在同一个目录中,由于程序所在目录是不确定的,因此不允许在程序中含有盘符信息和任何形式的路径信息。
6. 选手在竞赛结束时应在D盘根目录下建立以参赛号命名的文件夹,并将所完成各题的源程序文件放到该文件夹中。测试以评测组编译的可执行文件为准,测试系统使用的是标准的编译指令处理源程序,没有附加任何编译选项,请选手按照考试机器上语言环境的默认配置来编译调试自己的程序。
题目
1. 迷宫密码(sum)
猪无戒将蓝兔关在了一座迷宫里。虹猫来到紧闭的迷宫大门前,发现需要输入密码才能将大门打开。守门人告诉他密码就隐藏在门旁的一个方形木盘中。方形木盘中有M行N列格子,每个格子中刻有一个数字,虹猫需要选择一个数字之和最大的长方形区域来开启迷宫大门。虹猫应该怎么做呢?
输入:共M+1行,第一行为正整数M(1≤M≤500)和N《1≤N≤500)(中间用空格隔开),表示木盘上有M行N列的格子。接下来的M行,每行有N个整数(中间用空格隔开),表示格子中的数字,取值范围是[-500,500]。
输出:一个整数,表示数字之和最大的长方形区域内的数字和。
样例:
输入(sum.in):
5 4
-1 -2 -3 -4
-3 -2 2 4
-3 -4 3 5
4 -5 3 6
-3 -2 -1 0
输出(sum.out):
23
限制:
50%的数据,1≤M≤50,1≤N≤50
90%的数据,1≤M≤100,1≤N≤100
100%的数据,1≤M≤500,1≤N≤500
2. 重重机关(maze)
虹猫终于开启了迷宫的大门,守门人告诉虹猫迷宫里没有水和食物,因此虹猫必须以最快的速度救出蓝兔。守门人还把迷宫的一些情况告诉了虹猫。这座迷宫共有N个密室,入口密室编号为1,蓝兔所在的密室编号为N。各密室之间一共有M条单向密道。部分密道入口处有机关,这些机关最初是关闭的,一旦有人进入迷宫,所有机关就会按照预先设定的各自的时间间隔S和C循环关闭和开启。如果进入某条密道时恰好该密道入口处的机关处于开启状态,就会被机关困住,需要一定时间E才能挣脱机关继续前进。
除N号密室外,迷宫的所有地面都无法停留,否则地面就会陷落,虹猫只能马不停蹄地一直往前走。设虹猫进入迷宫的时刻为0,N个密室的通过时间可以忽略不计,通过密道则需要一定的时间T,请你帮助虹猫用最短的时间到达N号密室救出蓝兔。
输入:共M+1行,第一行为正整数N和M(中间用空格隔开)(1≤N≤10000,1≤M≤1000000),分别表示密室的数量和密道的数量。接下来共M行,每行有6个整数(中间用空格隔开),分别是U、V、T、S、C、E,其中U、V表示该条密道由密室U通往密室V(1≤U、V≤N);T表示通过该密道需要T分钟(1≤T≤200);S和C表示密道入口机关在有人进入迷宫S分钟后开启,保持开启状态C分钟后关闭,然后保持关闭状态S分钟后再度开启,循环往复(0≤S、C≤200,且S、C不同时为0);E表示一旦被机关困住,需要E分钟才能挣脱机关继续前进(1≤E≤600)。
以下面的一行输入数据为例:
3 4 6 2 1 7
表示该密道从3号密室连接到4号密室,通过该密道需要6分钟,在有人进入迷宫后,该密道入口的机关在[0,2)时间区间为关闭状态(如果时刻t在 [a,b)时间区间,则有a≤t<b),[2,3)时间区间为开启状态,[3,5)时间区间为关闭状态,循环往复。也就是说,如果虹猫在2分(含2分)到3分(不含3分)之间进入该密道,此时机关恰好是开启状态,他会被机关困住,需7分钟才能挣脱;而如果他在3分(含3分)到5分(不含5分)之间进入密道,则此时机关恰好是关闭状态,不会被机关困住。
输出:一个正整数,表示虹猫到达N号密室的最短时间(单位:分钟)。
样例:
输入(maze.in):
4 5
1 2 1 3 2 2
1 3 5 4 2 6
2 1 2 3 0 3
2 4 3 0 1 5
3 4 6 2 1 7
输出(maze.out)
9
限制:
40%的数据,N≤100,M≤1000
100%的数据,N≤10000,M≤1000000
所有数据保证1号密室到N号密室连通。
3. 开心农场(farm)
虹猫成功救出蓝兔后,为了帮助蓝兔摆脱心理阴影,和蓝兔一起玩起了开心农场的游戏。这个游戏开始时有一个体验期,系统会分配给玩家一定数量的金币。规定在同一时期只能种植一种作物,但是只要金币允许,玩家可以在土地上种植任意多的同一种作物。种子需要一定费用,作物一旦成熟玩家就收获并售出作物。系统将根据玩家在体验期结束时所拥有的金币数量给予相应奖励(如果作物在体验期结束的时刻尚未成熟,则不计入在内)。农场中的作物有的在体验期内全时段开放种植,而有的则只能在某个时段种植。每种作物播种以后需要经过一定的时间才会成熟,而播种、收获的时间可以忽略不计。虹猫是个爱思考的孩子,他想在体验期内获得最多的金币,应该怎么做呢?
输入:共K+1行,第一行有3个正整数M、D和K,分别用一个空格隔开,其中M表示游戏开始时所拥有的金币数量(1≤M≤200),D表示体验期的时长(1≤D≤10000,单位:小时),K表示作物的种类数(1≤K≤5000)。接下来K行,每行有5个用空格隔开的非负整数,分别是S、F、T、B、E,其中S表示该作物的种子单价(1≤S≤100),F表示该作物的售出价格(S≤F≤1000),T表示该作物成熟需要的时间(1≤T≤100,单位:小时),B和E分别表示该作物可以种植的开始时间和结束时间(即若当前时刻为t,且Bi≤t<Ei,则此时第i种作物可以播种,且其成熟时间可在Ei时刻以后,1≤i≤K;B、E单位为时,0≤B≤D,B<E≤10000)。
输出:一个正整数,表示体验期结束时虹猫能够拥有的最多金币数。
样例:
输入(farm.in):
11 2 2
10 15 1 0 2
12 20 1 0 2
输出(farm.out):
24
限制:
40%的数据,D≤100,K≤10
100%的数据,D≤10000,K≤5000
4. 武林大会(match)
虹猫和好朋友们组队参加武林大会,最终的决赛在他和猪无戒的参赛组之间展开。比赛规则如下:两个组都必须出N个选手,每个选手必须与对方组的一个选手进行一场比赛,且只能进行一场比赛。经过对本组组员和对方组员使用的武器和武功的分析,虹猫得出了自己组中的每个成员与对方组员比赛时的取胜概率pij%(其中pij为非负整数,0≤pij≤100,1≤i,j≤N)。虹猫经过细心的计算,发现了一种对阵方式,能使得虹猫组的平均取胜概率最大,其中平均取胜概率为某种对阵方式下,虹猫组所有组员取胜概率之和的平均值向下取整(例如,73.635向下取整的值为73)。你知道虹猫是怎么做的吗?
输入:共N+1行,第一行为正整数N(1≤N≤200),表示每个组的参赛队员数。接下来N行,每行有N个不大于100的用空格隔开的非负整数,其中第i行的第j个数字表示虹猫组的第i个组员对猪无戒组的第j个组员的取胜概率pij%( 0≤pij≤100,1≤i,j≤N)。
输出:一个正整数,表示虹猫组的最大平均取胜概率。
样例:
输入(match.in):
4
40 50 30 70
80 30 40 70
50 60 70 80
90 10 20 30
输出(match.out):
70
限制:
20%的数据,1≤N≤8
60%的数据,1≤N≤15
100%的数据,1≤N≤200