ACM训练题汇总.docx
- 文档编号:7912474
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:22
- 大小:121.68KB
ACM训练题汇总.docx
《ACM训练题汇总.docx》由会员分享,可在线阅读,更多相关《ACM训练题汇总.docx(22页珍藏版)》请在冰豆网上搜索。
ACM训练题汇总
ACM培训班训练题
1.鸡兔同笼
描述
一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。
已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物
输入
第1行是测试数据的组数n,后面跟着n行输入。
每组测试数据占1行,每行一个正整数a(a<32768)
输出
输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。
如果没有满足要求的答案,则输出两个0。
样例输入
2
3
20
样例输出
00
510
2.DistanceonChessboard
描述
国际象棋的棋盘是黑白相间的8*8的方格,棋子放在格子中间。
如下图所示:
王、后、车、象的走子规则如下:
王:
横、直、斜都可以走,但每步限走一格。
后:
横、直、斜都可以走,每步格数不受限制。
车:
横、竖均可以走,不能斜走,格数不限。
象:
只能斜走,格数不限。
写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。
输入
第一行是测试数据的组数t(0<=t<=20)。
以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。
位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到"8"。
输出
对输入的每组测试数据,输出王、后、车、象所需的最少步数。
如果无法到达,就输出"Inf".
样例输入
2
a1c3
f5f8
样例输出
2121
311Inf
3.装箱问题
描述
一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1,2*2,3*3,4*4,5*5,6*6。
这些产品通常使用一个6*6*h的长方体包裹包装然后邮寄给客户。
因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。
他们很需要有一个好的程序帮他们解决这个问题从而节省费用。
现在这个程序由你来设计。
输入
输入文件包括几行,每一行代表一个订单。
每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。
输入文件将以6个0组成的一行结尾。
输出
除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。
样例输入
004001
751000
000000
样例输出
2
1
4.八皇后问题
描述
会下国际象棋的人都很清楚:
皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。
如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉!
这就是著名的八皇后问题。
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。
已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。
串的比较是这样的:
皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。
输入
第1行是测试数据的组数n,后面跟着n行输入。
每组测试数据占1行,包括一个正整数b(1<=b<=92)
输出
输出有n行,每行输出对应一个输入。
输出应是一个正整数,是对应于b的皇后串。
样例输入
2
1
92
样例输出
15863724
84136275
5.最长上升子序列
描述
一个数的序列bi,当b1 < b2 <...< bS的时候,我们称这个序列是上升的。
对于给定的一个序列(a1, a2,..., aN),我们可以得到一些上升的子序列(ai1, ai2,..., aiK),这里1<= i1 < i2 <...< iK <=N。
比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。
这些子序列中最长的长度是4,比如子序列(1,3,5,8).
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
输入
输入的第一行是序列的长度N(1<=N<=1000)。
第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
输出
最长上升子序列的长度。
样例输入
7
1735948
样例输出
4
6.公共子序列
描述
我们称序列Z=
现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。
输入
输入包括多组测试数据。
每组数据包括一行,给出两个长度不超过200的字符串,表示两个序列。
两个字符串之间由若干个空格隔开。
输出
对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。
样例输入
abcfbcabfcab
programmingcontest
abcdmnp
样例输出
4
2
0
7.大整数加法
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。
结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
8.恼人的青蛙
描述
在韩国,有一种小的青蛙。
每到晚上,这种青蛙会跳越稻田,从而踩踏稻子。
农民在早上看到被踩踏的稻子,希望找到造成最大损害的那只青蛙经过的路径。
每只青蛙总是沿着一条直线跳越稻田,而且每次跳跃的距离都相同。
如下图所示,稻田里的稻子组成一个栅格,每棵稻子位于一个格点上。
而青蛙总是从稻田的一侧跳进稻田,然后沿着某条直线穿越稻田,从另一侧跳出去
如下图所示,可能会有多只青蛙从稻田穿越。
青蛙的每一跳都恰好踩在一棵水稻上,将这棵水稻拍倒。
有些水稻可能被多只青蛙踩踏。
当然,农民所见到的是图4中的情形,并看不到图3中的直线,也见不到别人家田里被踩踏的水稻,。
根据图4,农民能够构造出青蛙穿越稻田时的行走路径,并且只关心那些在穿越稻田时至少踩踏了3棵水稻的青蛙。
因此,每条青蛙行走路径上至少包括3棵被踩踏的水稻。
而在一条青蛙行走路径的直线上,也可能会有些被踩踏的水稻不属于该行走路径
①不是一条行走路径:
只有两棵被踩踏的水稻;
②是一条行走路径,但不包括(2,6)上的水道;
③不是一条行走路径:
虽然有3棵被踩踏的水稻,但这三棵水稻之间的距离间隔不相等。
请你写一个程序,确定:
在一条青蛙行走路径中,最多有多少颗水稻被踩踏。
例如,图4的答案是7,因为第6行上全部水稻恰好构成一条青蛙行走路径。
输入
从标准输入设备上读入数据。
第一行上两个整数R、C,分别表示稻田中水稻的行数和列数,1≤R、C≤5000。
第二行是一个整数N,表示被踩踏的水稻数量,3≤N≤5000。
在剩下的N行中,每行有两个整数,分别是一颗被踩踏水稻的行号(1~R)和列号(1~C),两个整数用一个空格隔开。
而且,每棵被踩踏水稻只被列出一次。
输出
从标准输出设备上输出一个整数。
如果在稻田中存在青蛙行走路径,则输出包含最多水稻的青蛙行走路径中的水稻数量,否则输出0。
样例输入
67
14
21
66
42
25
26
27
34
61
62
23
63
64
65
67
样例输出
7
9.滑雪
描述
Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激。
可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。
Michael想知道载一个区域中最长的滑坡。
区域由一个二维数组给出。
数组的每个数字代表点的高度。
下面是一个例子
12345
161718196
152425207
142322218
131211109
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。
在上面的例子中,一条可滑行的滑坡为24-17-16-1。
当然25-24-23-...-3-2-1更长。
事实上,这是最长的一条。
输入
输入的第一行表示区域的行数R和列数C(1<=R,C<=100)。
下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
输出
输出最长区域的长度。
样例输入
55
12345
161718196
152425207
142322218
131211109
样例输出
25
10.昂贵的聘礼
描述
年轻的探险家来到了一个印第安部落里。
在那里他和酋长的女儿相爱了,于是便向酋长去求亲。
酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。
探险家拿不出这么多金币,便请求酋长降低要求。
酋长说:
"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。
如果你能够弄来他的水晶球,那么只要5000金币就行了。
"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。
探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。
不过探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。
探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。
另外他要告诉你的是,在这个部落里,等级观念十分森严。
地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。
他是一个外来人,所以可以不受这些限制。
但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。
因此你需要在考虑所有的情况以后给他提供一个最好的方案。
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。
每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。
如果两人地位等级差距超过了M,就不能"间接交易"。
你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
输入
输入第一行是两个整数M,N(1<=N<=100),依次表示地位等级差距限制和物品的总数。
接下来按照编号从小到大依次给出了N个物品的描述。
每个物品的描述开头是三个非负整数P、L、X(X 接下来X行每行包括两个整数T和V,分别表示替代品的编号和"优惠价格"。 输出 输出最少需要的金币数。 样例输入 14 1000032 28000 35000 100021 4200 300021 4200 5020 样例输出 5250 11.炮兵阵地 描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。 一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H"表示),也可能是平原(用"P"表示),如下图。 在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域: 沿横向左右各两格,沿纵向上下各两格。 图上其它白色网格均攻击不到。 从图上可见炮兵的攻击范围不受地形的影响。 现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。 输入 第一行包含两个由空格分割开的正整数,分别表示N和M; 接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。 按顺序表示地图中每一行的数据。 N<=100;M<=10。 输出 仅一行,包含一个整数K,表示最多能摆放的炮兵部队的数量。 样例输入 54 PHPP PPHH PPPP PHPP PHHP 样例输出 6 12.聪明的打字员 描述 阿兰是某机密部门的打字员,她现在接到一个任务: 需要在一天之内输入几百个长度固定为6的密码。 当然,她希望输入的过程中敲击键盘的总次数越少越好。 不幸的是,出于保密的需要,该部门用于输入密码的键盘是特殊设计的,键盘上没有数字键,而只有以下六个键: Swap0,Swap1,Up,Down,Left,Right,为了说明这6个键的作用,我们先定义录入区的6个位置的编号,从左至右依次为1,2,3,4,5,6。 下面列出每个键的作用: Swap0: 按Swap0,光标位置不变,将光标所在位置的数字与录入区的1号位置的数字(左起第一个数字)交换。 如果光标已经处在录入区的1号位置,则按Swap0键之后,录入区的数字不变; Swap1: 按Swap1,光标位置不变,将光标所在位置的数字与录入区的6号位置的数字(左起第六个数字)交换。 如果光标已经处在录入区的6号位置,则按Swap1键之后,录入区的数字不变; Up: 按Up,光标位置不变,将光标所在位置的数字加1(除非该数字是9)。 例如,如果光标所在位置的数字为2,按Up之后,该处的数字变为3;如果该处数字为9,则按Up之后,数字不变,光标位置也不变; Down: 按Down,光标位置不变,将光标所在位置的数字减1(除非该数字是0),如果该处数字为0,则按Down之后,数字不变,光标位置也不变; Left: 按Left,光标左移一个位置,如果光标已经在录入区的1号位置(左起第一个位置)上,则光标不动; Right: 按Right,光标右移一个位置,如果光标已经在录入区的6号位置(左起第六个位置)上,则光标不动。 当然,为了使这样的键盘发挥作用,每次录入密码之前,录入区总会随机出现一个长度为6的初始密码,而且光标固定出现在1号位置上。 当巧妙地使用上述六个特殊键之后,可以得到目标密码,这时光标允许停在任何一个位置。 现在,阿兰需要你的帮助,编写一个程序,求出录入一个密码需要的最少的击键次数。 输入 仅一行,含有两个长度为6的数,前者为初始密码,后者为目标密码,两个密码之间用一个空格隔开。 输出 仅一行,含有一个正整数,为最少需要的击键次数。 样例输入 123456654321 样例输出 11 13.拼写检查 描述 现在有一些英语单词需要做拼写检查,你的工具是一本词典。 需要检查的单词,有的是词典中的单词,有的与词典中的单词相似,你的任务是发现这两种情况。 单词A与单词B相似的情况有三种: 1、删除单词A的一个字母后得到单词B; 2、用任意一个字母替换单词A的一个字母后得到单词B; 3、在单词A的任意位置增加一个字母后得到单词B。 你的任务是发现词典中与给定单词相同或相似的单词。 输入 第一部分是词典中的单词,从第一行开始每行一个单词,以"#"结束。 词典中的单词保证不重复,最多有10000个。 第二部分是需要查询的单词,每行一个,以"#"结束。 最多有50个需要查询的单词。 词典中的单词和需要查询的单词均由小写字母组成,最多包含15个字符。 输出 按照输入的顺序,为每个需要检查的单词输出一行。 如果需要检查的单词出现在词典中,输出“? xiscorrect",? x代表需要检查的单词。 如果需要检查的单词没有出现在词典中,则输出"? x: ? x1? x2...? xn",其中? x代表需要检查的单词,? x1...? xn代表词典中与需要检查的单词相似的单词,这些单词中间以空格隔开。 如果没有相似的单词,输出"? x: "即可。 样例输入 i is has have be my more contest me too if award # me aware m contest hav oo or i fi mre # 样例输出 meiscorrect aware: award m: imyme contestiscorrect hav: hashave oo: too or: iiscorrect fi: i mre: moreme 14.陨石的秘密 描述 公元11380年,一颗巨大的陨石坠落在南极。 于是,灾难降临了,地球上出现了一系列反常的现象。 当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点。 经过一番侦察,科学家们发现陨石上刻有若干行密文,每一行都包含5个整数: 11116 006357 801132845 著名的科学家SS发现,这些密文实际上是一种复杂运算的结果。 为了便于大家理解这种运算,他定义了一种SS表达式: 1.SS表达式是仅由'{','}','[',']','(',')'组成的字符串。 2.一个空串是SS表达式。 3.如果A是SS表达式,且A中不含字符'{','}','[',']',则(A)是SS表达式。 4.如果A是SS表达式,且A中不含字符'{','}',则[A]是SS表达式。 5.如果A是SS表达式,则{A}是SS表达式。 6.如果A和B都是SS表达式,则AB也是SS表达式。 例如 ()(())[] {()[()]} {{[[(())]]}} 都是SS表达式。 而 ()([])() [() 不是SS表达式。 一个SS表达式E的深度D(E)定义如下: 例如(){()}[]的深度为2。 密文中的复杂运算是这样进行的: 设密文中每行前4个数依次为L1,L2,L3,D,求出所有深度为D,含有L1对{},L2对[],L3对()的SS串的个数,并用这个数对当前的年份11380求余数,这个余数就是密文中每行的第5个数,我们称之为? 神秘数? 。 密文中某些行的第五个数已经模糊不清,而这些数字正是揭开陨石秘密的钥匙。 现在科学家们聘请你来计算这个神秘数。 输入 共一行,4个整数L1,L2,L3,D。 相邻两个数之间用一个空格分隔。 (0<=L1<=10,0<=L2<=10,0<=L3<=10,0<=D<=30) 输出 共一行,包含一个整数,即神秘数。 样例输入 1112 样例输出 8 15.GleamingtheCubes 描述 AschiefengineeroftheStarshipInterprize,thetaskofrepairingthehyperstellar,cubic,transwarped-outsoftwarehasfallenonyourshoulders.Simplyput,youmustcomputethevolumeoftheintersectionofanywherefrom2to1000cubes. 输入 Theinputconsistsofseveralsetsofcubesforwhichthevolumeoftheirintersectionsmustbecomputed.Thefirstlineofeachsetcontainsanumber(from2to1000)whichindicatesthenumberofcubeswhichfollow,onecubeperline.Eachlinewhichdescribesacubecontainsfourintegers.Thefirstthreeintegersarethex,y,andzcoordinatesofthecornerofacube,andthefourthintegeristhepositivedistancewhichthecubeextendsineachofthethreedirections(paralleltothex,y,andzaxes)fromthatcorner. Followingthedataforthefirstsetofcubeswillbeanumberwhichindicateshowmanycubesareinasecondset,followedbythecubedescriptionsforthesecondset,againoneperline.Followingthiswillbeathirdset,andsoon.Anumber=0indicatetheendofinput. 输出 Yourprogramshouldprocesssetsallofcubes,outputtingthevolumeoftheirintersectionstotheoutputfile,onesetperline,untilazeroisreadforthenumberofcubes. 样例输入 2 00010 9115 3 00010 9115 8223 0 样例输出 25 9 16.CrazySearch 描述 Manypeopleliketosolvehardpuzzlessomeofwhichmayleadthemtomadness.Onesuchpuzzlecouldbefindingahiddenprimenumberinagiventext.Suchnumbercouldbethenumberofdifferentsubstringsofagivensizethatexistinthetext.Asyousoonwilldiscover,youreallyneedthehelpofacomputerandagoodalgorithmtosolvesuchapuzzle. Yourtaskistowriteaprogramthatgiventhesize,N,ofthesubstring,thenumberofdifferentcharactersthatmayoccurinthetext,NC,andthetextitself,determinesthenumber
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM 训练 汇总