ACM程序设计试题001.docx
- 文档编号:30819839
- 上传时间:2024-01-30
- 格式:DOCX
- 页数:27
- 大小:29.70KB
ACM程序设计试题001.docx
《ACM程序设计试题001.docx》由会员分享,可在线阅读,更多相关《ACM程序设计试题001.docx(27页珍藏版)》请在冰豆网上搜索。
ACM程序设计试题001
ACM程序设计试题
平方数
给出包含M个数字的列表,和列表中所有数字的所有质因数。
求出最长的子列表,使得子列表中所有数字的乘积是一个完全平方数。
矚慫润厲钐瘗睞枥庑赖賃軔。
输入
输入文件包含多组测试数据。
第一行包含两个整数N,M(1<=N<=30,1<=M<=30000).N是质因数的个数。
接下来一行有N个整数,给出所有的质因数。
然后一行包含M个整数,给出列表。
聞創沟燴鐺險爱氇谴净祸測。
输入文件结束于N=M=0.
输出
对于每组数据,输出最长子列表的两个位置坐标lr。
l是该子列表在列表中的起始位置,r是结束位置。
如果多种情况都满足子列表长度最大,输出l最小的一个。
如果不存在这样的子列表输出“None”。
残骛楼諍锩瀨濟溆塹籟婭骒。
样例输入
34
235
49256
34
235
6633
00
样例输出
13
14
2.母牛生小牛
Problem
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
Input
本题有多组数据。
每组数据只有一个整数N,独占一行。
(1≤N≤50)
Output
对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量
SampleInput
1
4
5
20
SampleOutput
1
2
3
872
3.死亡迷宫
背景
很久以前,迷宫里住着一个恶魔。
一天,我们伟大的英雄Andy无意中踏入了这个迷宫。
不幸的是,他被困在这个迷宫当中了。
恶魔在迷宫中召唤出了许多怪物,想要阻止Andy逃脱。
在迷宫中,Andy遇到一个一位巫师。
他给了Andy迷宫的地图,并告诉他迷宫的入口很快会关闭。
Andy必须以非常快的速度到达入口,并且有足够的力气推开挡在入口的岩石。
于是,Andy带着地图一路向着出口走去……酽锕极額閉镇桧猪訣锥顧荭。
问题
给出Andy和各怪物的能量,攻击力,防御力,和迷宫的地图,请你计算一下能量/耗时的最大值。
当Andy走到有怪物的地方时,Andy会先进行攻击,然后怪物攻击,然后Andy……当一方的能量小于等于0时攻击停止,并且小于等于0的一方死亡。
攻击时,每次对方损耗的能量为己方的攻击力减去对方的防御力。
彈贸摄尔霁毙攬砖卤庑诒尔。
当Andy走到标有‘A’,‘B’,‘C’的地方时,Andy的相应属性会得到增加。
对应关系如下:
[A]能量+P
[B]攻击力+Q
[C]防御力+R
如果耗时超过100,那么门将永远也打不开了,我们的Andy也就永远的困在了这个暗无天日的迷宫之中……
输入
标准输入包含多组数据。
每组数据的第一行有六个整数W(1<=W<=20),H(1<=H<=20),P(1<=P<=10),Q(1<=Q<=10),R(1<=R<=10),M(0<=M<=5).迷宫是由一个W*H的矩形区域构成。
M表示怪物的数量。
Andy每个单位时间可以移动到相邻的4个格中,当然,必须得保证目标格在矩形区域中。
默认的起始时间是0。
与怪物战斗不会花费额外的时间。
謀荞抟箧飆鐸怼类蒋薔點鉍。
其后H行每行严格包含W个字符。
用如下的各字符表示这个迷宫的地图:
[#]表示一堵墙(Andy是不会穿墙术的)
[.]Marksanemptyspace,intowhichyoucanmove.表示一块空地。
厦礴恳蹒骈時盡继價骚卺癩。
[S]表示Andy的初始位置。
[E]表示迷宫的入口。
[0]表示各怪物。
[A]表示属性增加地点。
(使用次数仅限于一次)
其后一行有三个整数,表示Andy的能量,攻击力,和防御力。
其后M行,每行有四个整数,表示怪物的编号,和这个怪物的各属性。
输出
对于每组输入数据,输出能量/耗时的最大值,并保留4位小数。
如果Andy不能到达出口,输出“impossible”。
数据之间无空行。
茕桢广鳓鯡选块网羈泪镀齐。
样例输入
6177543
#################
##E......#......#
#A#....#.0.##.#B#
#1###########2###
#.S............C#
#################
1005910
023480
165410
220270
样例输出
3.7037
4.取石子游戏
Description
有两堆石子,数量任意,可以不同。
游戏开始由两个人轮流取石子。
游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。
最后把石子全部取完者为胜者。
现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
鹅娅尽損鹌惨歷茏鴛賴縈诘。
Input
输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。
籟丛妈羥为贍偾蛏练淨槠挞。
Output
输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。
SampleInput
21
84
47
SampleOutput
0
1
0
5.猪的安家
Andy和Mary养了很多猪。
他们想要给猪安家。
但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。
举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。
Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。
这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。
Andy都快疯了。
你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。
預頌圣鉉儐歲龈讶骅籴買闥。
输入
输入包含多组测试数据。
每组数据第一行包含一个整数n(n<=10)–Andy建立猪圈的次数,解下来n行,每行两个整数ai,bi(bi<=ai<=1000),表示Andy建立了ai个猪圈,有bi头猪没有去处。
你可以假定(ai,aj)=1.渗釤呛俨匀谔鱉调硯錦鋇絨。
输出
输出包含一个正整数,即为Andy家至少养猪的数目。
样例输入
3
31
51
72
样例输出
16
6.猫捉老鼠
一只猫和一只老鼠在10*10的迷宫中。
迷宫中的每个方格可以是空的,或者含有障碍。
猫和老鼠可以进入任意一个空的方格中。
当他们相遇时,猫和老鼠在同一个方格中。
但是,无论猫或老鼠都不能进入有障碍的方格。
我们可以用字符组成的二维数组表示迷宫,如下图所示。
铙誅卧泻噦圣骋贶頂廡缝勵。
老鼠在迷宫中按照一种固定的方式行走:
每个时刻,老鼠都向它所面对的方向前进一格,这需要花费1秒时间。
如果前方是一个障碍或者是迷宫的边界,它将花1秒的时间按顺时针方向转90度。
擁締凤袜备訊顎轮烂蔷報赢。
为了抓到老鼠,这只猫决定也按照与老鼠相同的行走方式行进。
猫和老鼠在每个单位时间内是同时行动的。
因此,如果猫和老鼠在行进过程中“擦肩而过”,猫是无法捉到老鼠的。
只有当猫和老鼠同时到达一个相同的格子时,猫才能捉住老鼠。
贓熱俣阃歲匱阊邺镓騷鯛汉。
初始时,猫和老鼠不会在同一个方格中。
并且它们都面向北方。
你的任务是编一个程序,求出猫捉到老鼠的所花时间。
输入输出格式
输入数据的第一行n,表示输入数据的组数。
每组数据由10行组成,每行10个字符,表示迷宫的地图以及猫和老鼠的初始位置。
输入数据保证只有一只猫和一只老鼠。
坛摶乡囂忏蒌鍥铃氈淚跻馱。
每组输入数据之后均有一个空行作为间隔。
对于每组给定的输入,输出一行仅含一个数,即猫捉到老鼠所花的时间。
如果猫永远都无法抓到老鼠,则输出0。
样例输入
1
*...*.....
......*...
...*...*..
..........
...*.c....
*.....*...
...*......
..m......*
...*.*....
.*.*......
样例输出
49
7.炮兵阵地
Description
司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。
一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H"表示),也可能是平原(用"P"表示),如下图。
在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:
蜡變黲癟報伥铉锚鈰赘籜葦。
如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:
沿横向左右各两格,沿纵向上下各两格。
图上其它白色网格均攻击不到。
从图上可见炮兵的攻击范围不受地形的影响。
買鲷鴯譖昙膚遙闫撷凄届嬌。
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。
綾镝鯛駕櫬鹕踪韦辚糴飙钪。
Input
第一行包含两个由空格分割开的正整数,分别表示N和M;
接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。
按顺序表示地图中每一行的数据。
N<=100;M<=10。
驅踬髏彦浃绥譎饴憂锦諑琼。
Output
仅一行,包含一个整数K,表示最多能摆放的炮兵部队的数量。
SampleInput
54
PHPP
PPHH
PPPP
PHPP
PHHP
SampleOutput
6
8.圣诞岛的旅行
Problem
Angel最近无聊,去了圣诞岛(CX*^_^*),他喜欢无目的的乱逛,当然,他不会轻易地回头。
Angel想去广场,那么,他什么时候才能到呢?
你已经得到了CX的地图,地图上有N(N<=100)个交叉路口,交叉路口之间有马路相连接(不超过1000条马路)。
因为CX的人遵循奇怪的规则,道路都是单向的,不同的道路之间有一定的距离,我们假设Angel所在的地点为点1,广场所在点为N。
假设Angel走一单位距离需要一单位时间。
问Angel最早和最迟什么时候到达广场?
猫虿驢绘燈鮒诛髅貺庑献鵬。
Input
本题有多组数据,第一行N,M,M是边的数量以后M行,每行3个整数X,Y,Weight,代表一条从X城市到Y城市,长度为Wweight的边。
锹籁饗迳琐筆襖鸥娅薔嗚訝。
Output
每组数据,第一行是最少时间,第二行是最迟时间,要是可怜的Angel可能永远到不了广场,输出一行Never。
構氽頑黉碩饨荠龈话骛門戲。
SampleInput
55
121
1410
231
341
451
SampleOutput
4
11
9.采药
【问题描述】
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。
为此,他想拜附近最有威望的医师为师。
医师为了判断他的资质,给他出了一个难题。
医师把他带到一个到处都是草药的山洞里对他说:
“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。
我会给你一段时间,在这段时间里,你可以采到一些草药。
如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。
”輒峄陽檉簖疖網儂號泶蛴镧。
如果你是辰辰,你能完成这个任务吗?
【输入文件】
输入文件medic.in的第一行有两个整数T(1<=T<=1000)和M(1<=M<=100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。
接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
尧侧閆繭絳闕绚勵蜆贅瀝纰。
【输出文件】
输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
识饒鎂錕缢灩筧嚌俨淒侬减。
【样例输入】
703
71100
691
12
【样例输出】
3
【数据规模】
对于30%的数据,M<=10;
对于全部的数据,M<=100。
10.国家利益
Background
没有永远的朋友,也没有永远的敌人,国家的行为取决于国家利益,国家的地位取决于国家实力
Problem
伊拉克战争结束后...
N个国家正在联合国开会商讨如何分配伊拉克的M块油田
N个国家按国家实力编号1,2,3...N,1号国家实力最强,第一个发言,N号最后一个发言,依次类推
发言国家会提出一个分配方案,所有有表决权的国家进行表决(包括发言国家自己),如果50%或以上
同意此方案,则会议结束,按照此国的方案分配油田,否则该国丧失表决权,下个国家重复上述过程
那么第一个国家提出怎样的方案才能使本国利益最大化?
Hint
每个国家分得的油田都是整数,不会出现几个国家共同拥有一块油田
每个国家都不希望别人的方案通过,但是每个国家都按照本国利益投票,比如1号国家提出一个方案,X号国家分Y油田,X号国家会进行比较,如果该方案被否决,那么下次2号提出的方案X号国家分Z油田,而Z Input 每行包括2个整数N,M,(N,M<=10^8) Output 每行包括1个整数,1号国家能获得的最多油田数 SampleInput 7100 SampleOutput 97 11.防御导弹 Problem 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷: 虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 某天,雷达捕捉到敌国的导弹来袭。 由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 恥諤銪灭萦欢煬鞏鹜錦聰櫻。 Input 最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数) Output 两个整数M和N。 表示: 这套系统最多能拦截M枚导弹,如果要拦截所有导弹最少要配备N套这种导弹系统。 鯊腎鑰诎褳鉀沩懼統庫摇饬。 SampleInput 300250275252200138245 SampleOutput 52 12.技能树 Problem 玩过Diablo的人对技能树一定是很熟悉的。 一颗技能树的每个结点都是一项技能,要学会这项技能则需要耗费一定的技能点数。 硕癘鄴颃诌攆檸攜驤蔹鸶胶。 只有学会了某一项技能以后,才能继续学习它的后继技能。 每项技能又有着不同的级别,级别越高效果越好,而技能的升级也是阌擻輳嬪諫迁择楨秘騖輛埙。 需要耗费技能点数的。 有个玩家积攒了一定的技能点数,他想尽可能地利用这些技能点数来达到最好的效果。 因此他给所有的级别都打上了分,他认为氬嚕躑竄贸恳彈瀘颔澩纷釓。 效果越好的分数也越高。 现在他要你帮忙寻找一个分配技能点数的方案,使得分数总和最高。 Input 该题有多组测试数据。 每组测试数据第一行是一个整数n(1<=n<=20),表示所有不同技能的总数。 接下来依次给出n个不同技能的详细情况。 每个技能描述包括5行。 第一行是该技能的名称。 第2行是该技能在技能树中父技能的名称,名称为None则表示该技能不需要任何的先修技能便能学习。 第3行是一个整数L(1<=L<=20),表示这项技能所能拥有的最高级别。 第4行共有L个整数,其中第I个整数表示从地I-1级升到第I级所需要的技能点数(0级表示没有学习过)。 第5行包括L个整数,其中第I个整数表示从第I-1级升级到第I级的效果评分,分数不超过20。 在技能描述之后,共有两行,第1行是一个整数P,表示目前所拥有的技能点数。 接下来1行是N个整数,依次表示角色当前习得的技能级别,0表示还未学习。 这里不会出现非法情况。 Output 每组测试数据只需输出最佳分配方案所得的分数总和。 SampleInput 3 FreezingArrow IceArrow 3 333 1546 IceArrow ColdArrow 2 43 1017 ColdArrow None 3 332 1552 10 001 SampleOutput 42 13.砝码问题 Problem 有一组砝码,重量互不相等,分别为m1、m2、m3……mn;它们可取的最大数量分别为x1、x2、x3……xn。 釷鹆資贏車贖孙滅獅赘慶獷。 现要用这些砝码去称物体的重量,问能称出多少种不同的重量。 Input 第一行为一整数t,表示有t组测试数据。 每组测试数据第一行一个整数n(n<=10),表示有多种不同的砝码; 第二行n个整数(中间用空格分隔),m1、m2、m3……mn,分别表示n个砝码的重量;(1<=mi<=20)怂阐譜鯪迳導嘯畫長凉馴鸨。 第三行n个整数(中间用空格分隔),x1、x2、x3……xn,分别表示n个砝码可取的最大数量。 (1<=xi<=20)谚辞調担鈧谄动禪泻類谨觋。 Output 每组数据输出仅一行,一个整数,表示利用给定的砝码可以称出的不同的重量数。 注: 包括0。 SampleInput 1 2 12 21 SampleOutput 5 14.数列极差问题 在黑板上写了N个正整数组成的一个数列,进行如下操作: 每次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的为max,最小的为min,则该数列的极差定义为M=max-min。 嘰觐詿缧铴嗫偽純铪锩癱恳。 请你编程,对于给定的数列,计算极差。 输入 输入包含多个测试集。 每个测试集的第一个数N表示正整数序列长度(0<=N<=50000),随后是N个正整数。 N为0表示输入结束。 熒绐譏钲鏌觶鷹緇機库圆鍰。 输出 每个结果一行 输入样例 3 1 2 3 0 输出样例 2 15.NumberTriangle Considerthenumbertriangleshownbelow.Writeaprogramthatcalculatesthehighestsumofnumbersthatcanbepassedonaroutethatstartsatthetopandendssomewhereonthebase.Eachstepcangoeitherdiagonallydowntotheleftordiagonallydowntotheright.鶼渍螻偉阅劍鲰腎邏蘞阕簣。 738 810 2744 45265 Inthesampleabove,theroutefrom7to3to8to7to5producesthehighestsum: 30.纣忧蔣氳頑莶驅藥悯骛覲僨。 Input Therearemultipletestcases.ThefirstlineofeachtestcasecontainsR(1<=R<=1000),thenumberofrows.Eachsubsequentlinecontainstheintegersforthatparticularrowofthetriangle.Allthesuppliedintegersarenon-negativeandnolargerthan100.颖刍莖蛺饽亿顿裊赔泷涨负。 Output Printasinglelinecontainingthelargestsumusingthetraversalspecifiedforeachtestcase.濫驂膽閉驟羥闈詔寢賻減栖。 SampleInput 5 7 38 810 2744 45265 SampleOutput 30 16.救援行动 Problem Angel被传说中神秘的邪恶的Moligpy人抓住了! 他被关在一个迷宫中。 迷宫的长、宽不超过200。 迷宫中有不可以越过的墙以及监狱的看守。 Angel的朋友带了一些救援队来到了迷宫中。 他们的任务是: 接近Angel。 我们假设接近Angel就是到达Angel所在的位置。 銚銻縵哜鳗鸿锓謎諏涼鏗穎。 假设移动需要1单位时间,杀死一个看守也需要1单位时间。 到达一个格子以后,如果该格子有看守,则一定要杀死(否则会死挤貼綬电麥结鈺贖哓类芈罷。 的很难看的……只见那个看守开了9倍狙镜……)。 交给你的任务是,最少要多少单位时间,才能到达Angel所在的地方? 赔荊紳谘侖驟辽輩袜錈極嚕。 (只能向上、下、左、右4个方向移动) Input 该题含有多组测试数据。 每组测试数据第一行二个整数n,m。 表示迷宫的大小为n*m。 以后n行,每行m个时字符。 其中“#”代表墙,“.”表示可以移动,“x”表示看守,“a”表示Angel,“r”表示救援队伍。 塤礙籟馐决穩賽釙冊庫麩适。 字母均为小写。 Output 一行,代表救出Angel的最短时间。 如果救援小组永远不能达到Angel处,则输出“PoorANGELhastostayintheprisonallhislife.”裊樣祕廬廂颤谚鍘羋蔺递灿。 SampleInput 78 #.#####. #.a#..r. #..#x... ..#..#.# #...##.. .#...... ........ SampleOutput 13 17.幻方矩阵 Problemdescription 幻方是一种很有意思的数字矩阵,在很早著名的九宫八卦阵就与幻方有关。 幻方的定义为: 1到N*N的整数填入N*N的方格中,每行和每列以及对角线的数字之和必须是相等的。 你作为八卦公司的顶级程序员,现在需要你解决一个问题,将任意奇数阶的幻方找出来。 Input 输入包括多个测试集,每行为一个正奇数N(1<=N<1000),0作为输入的结束且不需要处理。 Output 对于输入的每一个N,输出一个它所对应的N阶幻方,如果存在多个,任意一个即可。 每个幻方为N*N的矩阵, 对于每个幻方,每行输出幻方的一行,每行中的数字之间用一个或多个空格分开。 不同的幻方之间用一个空行分开。 仓嫗盤紲嘱珑詁鍬齊驁絛鯛。 SampleInput 1 3 0 SampleOutput 1 492 357 816 18.整数划分问题 整数划分是一个经典的问题。 希望这道题会对你的组合数学的解题能力有所帮助。 Input 每组输入是两个整数n和k。 (1<=n<=50,1<=k<=n) Output 对于每组输入,请输出六行。 第一行: 将n划分成若干正整数之和的划分数。 第二行: 将n划分成k个正整数之和的划分数。 第三行: 将n划分成最大数不超过k的划分数。 第四行: 将n划分成若干奇正整数之和的划分数。 第五行: 将n划
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM 程序设计 试题 001