东大编程竞赛题


Mod 9
输入文件:modular.in
对于一个整数N,求N Mod 9的结果。
Input:
每一行为一个整数,该整数的位数不超过500位。
处理到文件结束。
Output:
对于每一个输入的整数N,输出一行N Mod 9的结果。
Sample Input:
2
-4
9999999999999999999999999999999999999999999999999999999999
Sample Output:
2
5
0

Greedy Snake
输入文件:snake.in
贪吃蛇大家都玩过吧,当蛇吃到东西时,身体就增长一个单位,如果蛇碰到自己的身体或碰到墙壁,就game over。
现在,我们给出游戏地图,地图上有食物和墙壁,蛇一开始的长度为1,位置在地图的左上角,蛇可以向东(E)南(S)西(W)北(N)移动。另外,我们给出一串蛇的移动序列。现在要你解决的问题是,当蛇按照所给的移动序列移动后,最后会处于什么状态。
Input:
该问题有多个测试数据,一个测试数据中,第一行为两个整数M和N(1<=M、N<=40),接着是一个M*N的网格,网格中’#’表示墙、’.’表示空地、字母O表示食物、S表示蛇。接下来的一行是一个整数L(L<=50),然后是L个字符(E、W、S、N),表示蛇的移动序列。我们保证蛇不可能突然转身(例如当蛇的移动方向为E时,下一次移动不会是W)。另外注意,蛇可能在完成整个移动序列之前就game over。
两个测试数据之间以一空行隔开。当M = N = 0时结果。
Output:
       对于每个测试数据,根据蛇的最终状态输出以下句子中的其中一个:
(1)   The snake ran out of the map in step n
(2)   The snake ran into itself in step n
(3)   The snake crashed into a wall in step n
(4)   The snake’s length now is p

Sample Input:
3 4
S...
.O..
..O.
4
ESSE
 
3 4
S...
OOO#
....
11
SEEESWWWNNN
 
0 0
Sample Output:
The snake’s length now is 3
The snake crashed a wall in step 4
Hints:
在第一个样例中,蛇最后的状态是
....
.S..
.SS.
 
另外,请严格按照要求输出相应的句子

Box Moving
输入文件:box.in
仓库世家(搬箱子)是一个经典游戏,在游戏中你要把箱子搬到特定的位置上。但是在我们这个游戏里稍微有些不同,游戏里的地板是滑的,所以当你将箱子往某个方向稍微一推,箱子就会往该方向一直滑动直到碰到障碍物或到达目标位置。
 
Input:
第一行是两个整数M和N(3<=M、N<=20),接着M行是一个大小为M*N的网格,网格中’#’表示障碍、’*’表示目标位置、’B’表示箱子。网格的外围由障碍和目标位置组成。注意,一个网格只有一个’*’和一个’B’,而且’B’一定在外围的墙里面,而’*’可以嵌在外围墙里。(见样例)
注意有多个测试数据,测试数据间有一行空行。输入最后以M = N = 0结束。
Output:
对于一个给定的游戏网格,如果箱子不可能到达目标位置,输出:Impossible;如果可以到达,则输出到达目标位置所需的最小的移动次数。
Sample Input:
5 7
#######
#B....#
#.....*
#..#..#
#######
 
7 13
#############
#...#......##
#...........#
#...........#
#........#..#
#B.#......*.#
#############
 
0 0
Sample Output:
Impossible
6
Hints:
第二个样例中,要到达目标,可以这样移动
上、右、下、右、下、右
或者
上、右、下、右、上、右、下
等。。
 
而移动次数最少的是6次。

Argus
输入文件:argus.in
一个数据流是一个实时的连续的有序的物件序列,例如网络交通、在线拍卖、电话记录等。同样的,对于数据流的查询也是持续的,并且当新数据到达时会返回新的结果,例如,一个温室的气温检测的查询过程会这样运行:
Query-1:“每5分钟,获取最近5分钟的最高温度。”
Query-2:“返回每层楼最近10分钟的平均温度。”
为此,我们开发了叫一个叫Argus的数据流管理系统,该系统应用于处理对数据流的查询。用户可以向Argus注册查询,而Argus将会保持查询运行在不断变化的数据上,并按用户要求的频率向相关用户返回结果。
对于Argus,我们使用下面的指令来注册一个查询
Resigster Q_num Period
Q_num(0 < Q_num <= 3000) 是查询的ID号,而Period(0< Period<=3000)是获取两次相继结果的间隔时间。注册后Period秒后将返回第一次结果,然后每隔Period秒返回一次结果。
在Argus中,我们可以同时注册多个不同的查询。我们保证,每个查询都有不同的Q_num。而你的任务是,算出返回结果的前K次查询。如果有两个或以上的查询同时返回结果,它们将会以Q_num的升序顺序返回结果。
Input:
输入的第一部分是Argus注册指令,每个指令占一行。指令数不会超过1000,并且这些指令是同时执行的。这部分以一行”#”为结果。
输入的第二部分是你的任务,这一部分只有一行,为一个正整数K(K <= 10000)
Output:
你必须输出返回结果的前K次查询的Q_num,每个Q_num占一行。
Sample Input:
Register 2004 200
Register 2005 300
#
5
SampleOutput:
2004
2005
2004
2004
2005

Play On Words
输入文件:words.in
给出一组单词,判断是否可以将单词排序,使得每个单词的第一个字母和前一个单词的最后一个字母相同。
 
Input:
第一行为一个整数C,表示测试数据的数目。每个测试数据的第一行为整数N(1<=N<=10000),接下来的N行,每行为一个单词,每个单词都只包含小写字母并且最多包含100个字符。
 
Output:
如果不能将单词序列重组以满足要求,则输出一行”Impossible”,否则输出”Possible”。
 
Sample Input:
3
2
ok
ok
2
ok
ko
3
effects
cse
seu
Sample Output:
Impossible
Possible
Possible
Hints:
      不要暴力地穷搜……

Self Number
输入文件:无
对于任意一个正整数n,定义d(n)为n加上n的各位数之和,如d(75) = 75 + 7 + 5 = 87。给出任意一个n为起始值,我们可以构造一个无限上升序列n,d(n), d(d(n)), d(d(d(n))),……例如,设n=33,则下一个数为33+3+3=39,再下一个数为39+3+9=51,接着是51+5+1=57,故可以构造下面的序列:
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141,……
n就叫d(n)的生成器。在上面的序列中,33是39的生成器,39是51的生成器,等等。有一些数有一个以上生成器:如,101的生成器是91和100。还有一些数是没有生成器的,这就叫self-number。小于100的self-number有:1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86和97。
请编写程序,从小到大输出不大于1000000的所有self-number,一行一个。
Sample Output:
1
3
5
7
9
20
31


9903
9914
9925
9927
9938
9949
9960
9971
9982
9993


 
Hints:
注意该题没有输入。

Climbing Worm
输入文件:worm.in
在一个n英寸深的井里,有一条身长1英寸的小虫,它想尽力爬出井外。可是小虫的力气太小了,每分钟只能爬u英寸,然后就得休息1分钟。在这1分钟里,它又会滑下去d英寸。这个向上爬和休息的过程不断的进行着。这条小虫要用多久才能爬到井外呢?
小于1分钟的时间以1分钟计算。如果小虫在向上爬而即将休息的那一刻到达了井口,我们就认为它已经成功了,而不再计算接下来的休息时间。
 
Input:
每一行对应于一个输入,包括三个整数n, u 和d,且 d < u,  n < 100。n = 0代表输入结束。
Ouput:
对应于每一行输入,输出一行结果,每行只有一整数,表示小虫爬出深井所花的时间。
Sample Input:
10 2 1
20 3 1
0 0 0
Sample Output:
17
19

Prime Cuts
输入文件:prime.in
我们都知道,素数是只能被1和它本身整除的自然数,比如2,3,5…。在这个问题中,我们将请你编写一个程序,要求如下:给定一个自然数N,我们可以得到一个小于等于N的素数数列。例如,N=21时,我们得到了如下的数列:
2, 3, 5, 7, 11, 13, 17, 19
在上述数列中加入整数1,得到如下数列:
1, 2, 3, 5, 7, 11, 13, 17, 19
将这个数列记作Q(N)。
我们的问题是,给定整数N和C,如果Q(N)的长度是奇数,则找出Q(N)中间的2*C-1个数,如果Q(N)的长度是偶数,则找出Q(N)中间的2*C个数。此外,如果Q(N)的长度小于2*C-1(C是奇数的情况下)或2*C(C是偶数的情况下),则输出整个Q(N)数列。
Input:
输入文件由多行组成,第一行包括两个整数,以空格分开,分别代表N和C,( 1 <= N <= 1000, 1 <= C <= N)。处理到文件结束。
Output:
对应于每一行输入,输出一行结果。每一行输出以N的值开始,然后输出一个空格,接着是C的值和一个冒号(:)加一个空格,紧接着输出从Q(N)中取得的数列,每两个数之间用空格分开。
Sample Input;
21 2
18 2
18 18
100 7
Sample Output:
21 2: 5 7 11
18 2: 3 5 7 11
18 18: 1 2 3 5 7 11 13 17
100 7: 13 17 19 23 29 31 37 41 43 47 53 59 61 67
Hints:
注意冒号后面有空格,另外输出的数列最后不要输出多余的空格。

Meeting Date
输入文件:meeting.in
ICPC(International Collegiate Programming Contest)委员会决定尽可能早开一次会议来讨论一些工作问题,但是委员会的成员们都比较忙,因此秘书长要求每位成员向他发一份E-mail,告诉秘书长他(她)哪些时间有空可以过来开会。
秘书长委托你写一个程序,根据每位成员传来的空闲日期列表,选择合适的开会日期。要求这个开会日期是所有日期中与会成员最多的一天(假设成员只要有空就一定来开会)。如果这样的日期不止一天,就选择最早的那一天。
Input:
该问题有多个测试数据,每个测试数据由以下几部分组成:
第一行包含两个整数:N和Q
其中,N代表委员会的人数,Q表示开一次会议所需的最少人数,N和Q都是小于等于50,而Q<=N。
接下来的N行,表示各位成员的空闲日期列表,每行都是如下形式:
M Data1 Data2 Data2 … DataM
其中,M表示该成员空闲的天数,0<=M<=100,接下来M个正整数表示他(她)空闲的具体日期。比如:1表示明天有空,2表示后天有空,依此类推。这些数字是递增的并且没有重复。
每一行的输入数据,任两个数字之间使以一个空格隔开,第一个数字前面没有空格,最后一个数字后面也没有空格而是回车。
当N=0,Q=0时,表示输入结束。
Output:
对于每个测试数据,输出的结果为能够出席会议的人数最多的一天,用1,2,3…表示,1表示明天,2表示后天,依此类推。若合要求的日期有多个,则输出最早的那一天。但是,如果这一天能出席的人数小于规定的最少人数(即Q),则输出零表示找不到合适的日期。每个测试数据的输出占一行。N和Q都为0的那份数据不用输出结果。

Sample Input:
3 2
2 1 4
0
3 3 4 8
3 2
4 1 5 8 9
3 2 5 9
5 2 4 5 7 9
3 3
2 1 4
3 2 5 9
2 2 4
3 3
2 1 2
3 1 2 9
2 2 4
0 0
Sample Output:
4
5
0
2

Knight Move
输入文件:knight.in
给定一个8×8的国际象棋棋盘,在这64个格子中指定一个起点和一个终点,求棋子“马”从起点跳到终点所需的最少次数(“马”按照“马走日”的原则跳跃)。
Input:
输入文件包含多个测试数据,每个数据一行,包括起点和终点的两个坐标,坐标格式如下:首先是一个字母(a~h)表示所在的列(从左往右),紧跟着一个数字(1~8)表示所在的行(从上往下),两个坐标第一个是起点,第二个是终点,中间用一个空格隔开。
Output:
对于任一数据块,输出一个整数表示从起点到终点要跳的最少次数,每个输出占一行。
Sample Input:

e2 e4

a1 b2

b2 c3

a1 h8

a1 h7

h8 a1

b1 c3

f6 f6

Sample Output:

2

4

2

6

5

6

1

0


Ski
输入文件:Ski.in
Michael喜欢滑雪,为了获得速度,滑雪的区域必须向下倾斜,Michae想知道在一个区域中最长的滑坡。区域由一个二维数组给出,数组的每个数字表示点的高度,下面是一个例子:
1    2    3    4    5
16   17   18   19   6
15   24   25   20   7
14   23   22   21   8
13   12   11   10   9
一个人可以从某个点滑向上下左右四个点之一,当且仅当高度减小。在上面的例子中,一条可行的滑坡是24-17-16-1(从24开始,到1结束)。当然25-24-23-…3-2-1更长,事实上这是最长的一条。
Input:
输入文件包含多个数据块,每个数据块组成如下:
数据块第一行为两个整数R,C(1<=R,C<=100),分别表示区域的二维数组的行数和列数,接下来是R行,每行有C个整数,每个整数表示该点的高度。任两个整数之间由一个空格隔开,每一行第一个数之前和最后一个数之后都无空格。
R=C=0表示输入结束,对这个数据块不需处理。
Output:
对于每个数据块,输出一个整数表示区域中最长滑坡的长度,该整数独占一行。
Sample Input:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
0 0
Sample Output:
25

Customer Investigation
输入文件:customer.in
公司派你去和几位客户面谈,以了解他们对公司产品的意见。于是你打电话与客户联系,得知他们一般都很忙,不过他们还是会为你抽出一点时间。
现在的问题是有些客户的时间有冲突,你无法在一天内联系所有客户。所以你需要一个程序来帮助你安排第一天的工作,使得你能尽可能地和更多的客户进行联系。注意,客户不愿意你打乱他们的计划。如果你和某个客户约定见面,必须按时到达并且充分利用这段时间和他交谈,这样才不至于让他产生不满。你可以假设从一个客户处到另一个客户处的时间短得可以忽略不计。
Input:
输入包括多个测试数据,每个测试数据开头是一个整数n(1<=n<=1000),表示客户总数。接下来n行每行包括两个正整数s、t,分别表示该客户的空闲时间段的起始时间和终止时间。其中s<t。
Output:
对于每个测试数据,输出你一天所能拜访的最多客户数,每个输出占一行。
Sample Input:
3
1 15
2 19
15 17
Sample Output:
2
 
 
帮忙做一下
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值