acm入门题集.docx

上传人:b****5 文档编号:11796572 上传时间:2023-04-02 格式:DOCX 页数:48 大小:47.12KB
下载 相关 举报
acm入门题集.docx_第1页
第1页 / 共48页
acm入门题集.docx_第2页
第2页 / 共48页
acm入门题集.docx_第3页
第3页 / 共48页
acm入门题集.docx_第4页
第4页 / 共48页
acm入门题集.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

acm入门题集.docx

《acm入门题集.docx》由会员分享,可在线阅读,更多相关《acm入门题集.docx(48页珍藏版)》请在冰豆网上搜索。

acm入门题集.docx

acm入门题集

程序设计比赛试题主办方:

迅翔计算机协会

最少钱币数:

【问题描述】

这是一个古老而又经典的问题。

用给定的几种钱币凑成某个钱数,一般而言有多种方式。

如:

给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。

显然,最少需要2个钱币才能凑成15元。

你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

【要求】

【数据输入】输入可以有多个测试用例。

每个测试用例的第一行是待凑的钱数值M(1<=M<=2000,整数),接着的一行中,第一个整数K(1<=K<=10)表示币种个数,随后是K个互不相同的钱币面值Ki(1<=Ki<=1000)。

输入M=0时结束。

【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。

如果凑钱失败,输出“Impossible”。

你可以假设,每种待凑钱币的数量是无限多的。

【样例输入】

15

625102050100

1

12

0

【样例输出】

2

Impossible

Feli的生日礼物

【问题描述】

Felicia的生日是11月1日(和Kitty是同一天生的哦)。

于是Feli请来Kitty一起过生日。

Kitty带来了最新款的“Kitty猫”玩具准备送给Feli,不过她说,这份礼物可不是白送的。

Feli要帮她一个忙,才能够得到心仪已久的玩具。

Kitty说,“Kitty猫”玩具已经卖出了n!

个,n<=10^100*_*,Kitty想知道确切的数字,而不是无聊的“一个数加个感叹号”。

Feli听了大吃一惊。

要知道,算出n!

是一个无比艰巨的任务。

Feli告诉Kitty,就算Feli算出n!

Kitty也看不下去,因为当n=20时,计算机的长整型已经存不下了(Kitty只能接受1-9之间的数字)。

于是Kitty说,你只要告诉我n!

最后一位非0的数就可以了。

Feli想了想,立刻动手写了个程序算出了正确的答案。

现在,请你也试试看!

注意哦,AC的男生将会得到一个“HelloKitty”计算器(可编程,CPU1THz,Mem1TMB),AC的女生将会得到一个仿真“HelloKitty”宠物(善解人意,无须喂养,智商1101,附带写情书功能)。

【要求】

【数据输入】每行一个n,直到输入数据结束

【数据输出】对应输入的n,每行输出一个答案

【样例输入】

1101

【样例输出】

8

蛇行矩阵

【问题描述】

蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。

【要求】

【数据输入】本题有多组数据,每组数据由一个正整数N组成。

(N不大于100)

【数据输出】对于每一组数据,输出一个N行的蛇形矩阵。

两组输出之间不要额外的空行。

矩阵三角中同一行的数字用一个空格分开。

行尾不要多余的空格。

【样例输入】

5

【样例输出】

1361015

25914

4813

712

11

青蛙的约会

【问题描述】两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。

它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。

可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。

不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。

但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。

为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。

我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。

设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。

青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。

纬度线总长L米。

现在要你求出它们跳了几次以后才会碰面。

【要求】

【数据输入】输入只包括一行5个整数x,y,m,n,L,其中x≠y<2000000000,0

【数据输出】输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"

【样例输入】

12345

【样例输出】

4

敲七

【问题描述】

输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)

【要求】

【数据输入】一个整数N。

(N不大于30000)

【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。

【样例输入】

20

【样例输出】

7

14

17

连续邮资问题

【问题描述】

G国发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。

连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,使得可在1张信封上贴出从邮资1开始,增量为1的最大连续邮资区间。

例如,当n=5和m=4时,面值为(1,3,11,15,32)的5种邮票可以贴出邮资的最大连续邮资区间是1到70。

编程任务:

对于给定的正整数m和n,计算出邮票面值的最佳设计。

【要求】

【数据输入】输入数据每一行给出2个正整数m和n的值(1<=n,m<=9),最后以00表示文件结束。

【数据输出】对于输以假定(ai,aj)=1.

输出包含一个正整数,即为Andy家至少养猪的数目。

【样例输入】

3

31

51

72

【样例输出】

16

kitty猫的基因编码

【问题描述】

kitty的基因编码如下定义:

kitty的基因由一串长度2^k(k<=8)的01序列构成,为了方便研究,需要把,01序列转换为ABC编码。

用T(s)来表示01序列s的ABC编码T(s)=‘A'(当S全由'0'组成)T(s)=‘B'(当s全由'1'组成)T(s)=‘C'+T(s1)+T(s2)s1,s2为把s等分为2个长度相等的子串比如T('00')='A'T('00001111')='CAB'

【要求】

【数据输入】一行,长度为2^k,为kitty猫的01基因编码,有多个数据

【数据输出】一行,由ABC构成的ABC编码

【样例输出】

01001011

【样例输出】

CCCABACCBAB

取石子游戏

【问题描述】有两堆石子,数量任意,可以不同。

游戏开始由两个人轮流取石子。

游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。

最后把石子全部取完者为胜者。

现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

【要求】

【数据输入】输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。

【数据输出】输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。

【样例输入】

21

84

47

【样例输出】

0

1

0

勇气的挑战

【问题描述】

给定n个点的坐标(x,y,z),且n<=50,从点1出发,怎么样才能走一条路径,访问每个点一次且仅一次,使走过的距离和最小?

【要求】

【数据输入】多组数据.第1行n,然后n行3个整数坐标

【数据输出】每组一行,代表最小权和

【样例输入】

3

100

210

1-10

【样例输出】

3.4

统计同成绩学生人数

TotalSubmission(s):

1608AcceptedSubmission(s):

877

【问题描述】读入N名学生的成绩,将获得某一给定分数的学生人数输出。

【要求】

【数据输入】测试输入包含若干测试用例,每个测试用例的格式为第1行:

N第2行:

N名学生的成绩,相邻两数字用一个空格间隔。

第3行:

给定分数

当读到N=0时输入结束。

其中N不超过1000,成绩分数为(包含)0到100之间的一个整

数。

【数据输出】对每个测试用例,将获得给定分数的学生人数输出。

【样例输出】

3

806090

60

2

8566

0

5

6075905575

75

0

【样例输出】

1

0

2

钱币兑换问题

TotalSubmission(s):

494AcceptedSubmission(s):

247

【问题描述】在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。

请你编程序计算出共有多少种兑法。

【要求】

【数据输入】每行只有一个正整数N,N小于32768。

【数据输出】对应每个输入,输出兑换方法数。

【样例输入】

2934

12553

【样例输出】

718831

13137761

字串数

TotalSubmission(s):

405AcceptedSubmission(s):

90

【问题描述】

一个A和两个B一共可以组成三种字符串:

"ABB","BAB","BBA".

给定若赶字母和它们相应的个数,计算一共可以组成多少个不同的字符串.

【要求】

【数据输入】每组测试数据分两行,第一行为n(1<=n<=26),表示不同字母的个数,第二行为n个数A1,A2,...,An(1<=Ai<=12),表示每种字母的个数.测试数据以n=0为结束.

【数据输出】对于每一组测试数据,输出一个m,表示一共有多少种字符串.

【样例输入】

2

12

3

222

0

【样例输出】

3

90

小希的数表

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

201AcceptedSubmission(s):

48

【问题描述】

Gardon昨天给小希布置了一道作业,即根据一张由不超过5000的N(3<=N<=100)个正整数组成的数表两两相加得到N*(N-1)/2个和,然后再将它们排序。

例如,如果数表里含有四个数1,3,4,9,那么正确答案是4,5,7,10,12,13。

小希做完作业以后出去玩了一阵,可是下午回家时发现原来的那张数表不见了,好在她做出的答案还在,你能帮助她根据她的答案计算出原来的数表么?

【要求】

【数据输入】包含多组数据,每组数据以一个N开头,接下来的一行有按照大小顺序排列的N*(N-1)/2个数,是小希完成的答案。

文件最后以一个0结束。

假设输入保证解的存在性和唯一性。

【数据输出】对于每组数据,输出原来的数表。

它们也应当是按照顺序排列的。

【样例输入】

4

457101213

4

5678910

0

【样例输出】

13492346

士兵队列训练问题

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

462AcceptedSubmission(s):

185

【问题描述】某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:

从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。

,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

【要求】

【数据输入】本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

【数据输出】共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。

【样例输入】

2

20

40

【样例输出】

1719

11937

最简单的计算机

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

287AcceptedSubmission(s):

192

【问题描述】

一个名叫是PigHeadThree的研究组织设计了一台实验用的计算机,命名为PpMm。

PpMm只能执行简单的六种命令A,B,C,D,E,F;只有二个内存M1,M2;三个寄存器R1,

R2,R3。

六种命令的含义如下:

命令A:

将内存M1的数据装到寄存器R1中;命令B:

将内存M2的数据装到寄存器R2中;命令C:

将寄存器R3的数据装到内存M1中;命令D:

将寄存器R3的数据装到内存M2中;命令E:

将寄存器R1中的数据和寄存器R2中的数据相加,结果放到寄存器R3中;命令F:

将寄存器R1中的数据和寄存器R2中的数据相减,结果放到寄存器R3中。

你的任务是:

设计一个程序模拟PpMm的运行。

【要求】

【数据输入】有若干组,每组有2行,第一行是2个整数,分别表示M1和M2中的初始内容;第二行是一串长度不超过200的由大写字母A到F组成的命令串,命令串的含义如上所述。

【数据输出】对应每一组的输入,输出只有一行,二个整数,分别表示M1,M2的内容;其中M1和M2之间用逗号隔开。

其他说明:

R1,R2,R3的初始值为0,所有中间结果都在-2^31和2^31之间。

【样例输入】

100288

ABECED

876356321456

ABECAEDBECAF

【数据输出】

388,388

2717080,1519268

愚人节的礼物

TimeLimit:

5000/1000MS(Java/Others)MemoryLimit:

32768/32768K(Java/Others)

TotalSubmission(s):

241AcceptedSubmission(s):

168

【问题描述】

四月一日快到了,Vayko想了个愚人的好办法——送礼物。

嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物。

盒子里面可以再放零个或者多个盒子。

假设放礼物的盒子里不再放其他盒子。

用()表示一个盒子,B表示礼物,Vayko想让你帮她算出愚人指数,即最少需要拆多少个盒子才能拿到礼物。

【要求】

【数据输入】本题目包含多组测试,请处理到文件结束。

每组测试包含一个长度不大于1000,只包含'(',')'和'B'三种字符的字符串,代表Vayko设计的礼物透视图。

你可以假设,每个透视图画的都是合法的。

【数据输出】对于每组测试,请在一行里面输出愚人指数。

【样例输入】

((((B)()))())

(B)

【样例输出】

4

1

整数对

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

111AcceptedSubmission(s):

29

【问题描述】

Gardon和小希玩了一个游戏,Gardon随便想了一个数A(首位不能为0),把它去掉一个数字以后得到另外一个数B,他把A和B的和N告诉了小希,让小希猜想他原来想的数字。

不过为了公平起见,如果小希回答的数虽然不是A,但同样能达到那个条件(去掉其中的一个数字得到B,A和B之和是N),一样算小希胜利。

而且小希如果能答出多个符合条件的数字,就可以得到额外的糖果。

所以现在小希希望你编写一个程序,来帮助她找到尽可能多的解。

例如,Gardon想的是A=31,B=3告诉小希N=34,

小希除了回答31以外还可以回答27(27+7=34)所以小希可以因此而得到一个额外的糖果。

【要求】

【数据输入】输入包含多组数据,每组数据一行,包含一个数N(1<=N<=10^9),文件以0结尾。

【数据输出】对于每个输入的N,输出所有符合要求的解(按照大小顺序排列)如果没有这样的解,输出"Nosolution."

【样例输入】

34

152

21

0

【样例输出】

273132

126136139141

Nosolution.

寒冰王座

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

875AcceptedSubmission(s):

358

【问题描述】不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前.死亡骑士:

“我要买道具!

”地精商人:

“我们这里有三种道具,血瓶150块一个,魔法药200块一个,无敌药水350块一个。

”死亡骑士:

“好的,给我一个血瓶。

”说完他掏出那张N元的大钞递给地精商人.地精商人:

“我忘了提醒你了,我们这里没有找客人钱的习惯的,多的钱我们都当小费收了的,嘿嘿。

”死亡骑士:

“……”死亡骑士想,与其把钱当小费送个他还不如自己多买一点道具,反正以后都要买的,早点买了放在家里也好,但是要尽量少让他赚小费。

现在死亡骑士希望你能帮他计算一下,最少他要给地精商人多少小费。

【要求】

【数据输入】输入数据的第一行是一个整数T(1<=T<=100),代表测试数据的数量.然后是T行测试数据,每个测试数据只包含一个正整数N(1<=N<=10000),N代表死亡骑士手中钞票的面值.

注意:

地精商店只有题中描述的三种道具.

【数据输出】对于每组测试数据,请你输出死亡骑士最少要浪费多少钱给地精商人作为小费.

【样例输入】

2

900

250

【样例输出】

0

50

覆盖的面积

TimeLimit:

10000/5000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

170AcceptedSubmission(s):

60

【问题描述】给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.

【要求】

【数据输入】输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平面上的一个矩形的左上角坐标和右下角坐标,矩形的上下边和X轴平行,左右边和Y轴平行.坐标的范围从0到100000.注意:

本题的输入数据较多,推荐使用scanf读入数据.

【数据输出】对于每组测试数据,请计算出被这些矩形覆盖过至少两次的区域的面积.结果保留两位小数.

【样例输入】

2

5

1142

1337

21.554.5

3.51.257.54

63107

3

0019

1029

20325

【样例输出】725

0.00

积木分发

Timelimit:

10sMemorylimit:

32768K

TotalSubmit:

1125AcceptedSubmit:

365

【问题描述】

歌手ThePancakes到幼儿园跟小朋友玩耍,她到达的时候小朋友们已经争着积木玩了。

小朋友都想要更多的积木砌一个自己喜欢的图形,砌完就可以和ThePancakes合照。

同时,ThePancakes手上还有一些积木,她可以把手上的这些积木全部给一个小朋友,然后等该小朋友砌完后就可以收回所发的积木和该小朋友原先手上的积木。

但她不知道能否让所有的小朋友都和她合照,聪明的你可以帮助她吗?

【要求】

【数据输入】输入包含多个数据。

每个数据的第一行是两个正整数n和s,1≤n≤10000,1≤s≤1000000,表示一共有n位小朋友,ThePancakes手上有s块积木。

以下有n行,每行有两个正整数,a和b,1≤a,b≤10^9,表示第i个小朋友手上有a块积木,还需要b块积木才能够砌完。

有多少种可能的决斗过程。

例如N=3,有6种不同的过程:

12->13,12->23,13->12,13->32,23->21,23->31。

注意:

文件里只有一个整数N(2≤N≤1000)。

【数据输出】输出一个整数,为可能的过程的总数除以10007的余数。

【样例输入】

4

【样例输出】

96

猴子的争斗

Timelimit:

1sMemorylimit:

32768K

TotalSubmit:

184AcceptedSubmit:

75

【问题描述】从前在一个森林里,有N只好斗的猴子。

一开始,他们互不认识。

互不认识的猴子间是无法避免争斗的,而且争斗只会发生在两只互不认识的猴子间。

决斗结束后,这两只猴子和他们各自的朋友们通过这场决斗相互间都认识了,争斗便不会再发生在这一大群猴子中的任两只。

由于争斗是比较激烈的,所以同一时间内不会有两场决斗一起发生。

经过N-1次决斗后,这N只猴子间相互都认识了,现在问有多少种可能的决斗过程。

例如N=3,有6种不同的过程:

12->13,12->23,13->12,13->32,23->21,23->31。

【要求】

【数据输入】文件里只有一个整数N(2≤N≤1000)。

【数据输出】输出一个整数,为可能的过程的总数除以10007的余数。

【样例输入】

4

【样例输出】

96

排序

Timelimit:

10sMemorylimit:

32768K

TotalSubmit:

70AcceptedSubmit:

2

【问题描述】

通常我们对一个长度为n(n≤24)的整数数列进行排序操作,其实就是讲他们按照从小到大的顺序重整。

一般情况下我们可以比较任意两个数之间的大小并交换他们的位置,但这里我们限制只能数列的某一个前缀序列翻转,除此之外的任何操作都是不允许的。

更精确地说,假设数列a1,a2,……,an,一个合法的操作是把数列变为ak,ak-1,……,a2,a1,ak+1,ak+2,……,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1