acm编程比赛入门题目集.docx
- 文档编号:7651361
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:49
- 大小:44.56KB
acm编程比赛入门题目集.docx
《acm编程比赛入门题目集.docx》由会员分享,可在线阅读,更多相关《acm编程比赛入门题目集.docx(49页珍藏版)》请在冰豆网上搜索。
acm编程比赛入门题目集
程序设计比赛试题
eli的生日礼物
【问题描述】
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
取石子游戏
【问题描述】
有两堆石子,数量任意,可以不同。
游戏开始由两个人轮流取石子。
游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。
最后把石子全部取完者为胜者。
现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
【要求】
【数据输入】输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数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
000
110
1-10
【样例输出】
3.4
统计同成绩学生人数
TimeLimit:
2000/1000MS(Java/Others)MemoryLimit:
65536/32768K(Java/Others)
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
钱币兑换问题
TimeLimit:
2000/1000MS(Java/Others)MemoryLimit:
65536/32768K(Java/Others)
TotalSubmission(s):
494AcceptedSubmission(s):
247
【问题描述】
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。
请你编程序计算出共有多少种兑法。
【要求】
【数据输入】每行只有一个正整数N,N小于32768。
【数据输出】对应每个输入,输出兑换方法数。
【样例输入】
2934
12553
【样例输出】
718831
13137761
字串数
TimeLimit:
2000/1000MS(Java/Others)MemoryLimit:
65536/32768K(Java/Others)
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
【样例输出】
1349
2346
士兵队列训练问题
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
0011
1021
2031
【样例输出】
7.63
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,……,an,其中1 例如: 数列3214,可能的操作有三种,分别是2314、1234、4123。 你任务是求出一个序列用上面的方法排序至少需要多少步。 【要求】 【数据输入】输入文件有两行: 第一行是一个整数n,表示数列的长度。 第二行有n个整数,表示待排序的数列,每个整数的绝对值不大于32767。 【数据输出】输出文件有一行是一个整数s,表示完成排序所需的最少步数。 【样例输入】 4 3214 【样例输出】 1 提示: 只需要一步就可以完成排序: 32141234。 选址 Timelimit: 10sMemorylimit: 32768K TotalSubmit: 100AcceptedSubmit: 13 【问题描述】 很久以前,在世界的某处有一个形状为凸多边形的小岛,岛上的居民们决定建一个祭坛,居民们认为祭坛的位置离岛的顶点处越远越好。 你的任务是求凸多边形内一点,使其与各顶点的距离中最短的距离最远,点在边上也可以。 这样的点可能有多个,你只需输出这些点与各顶点的最短距离。 【要求】 【数据输入】第一行是一个整数N(3≤N≤100)。 接下来N行按逆时针顺序给出每个顶点的坐标,每行包含2个实数,表示顶点的横坐标和纵坐标(坐标绝对值小于10000)。 【数据输出】输出一个实数,表示凸多边形内一点与各顶点的距离中最短的距离的最大值。 【样例输入】 3 02 90 77 【样例输出】 4.893 过河 Timelimit: 1sMemorylimit: 32768K TotalSubmit: 518AcceptedSubmit: 65 【问题描述】 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。 在桥上有一些石子,青蛙很讨厌踩在这些石子上。 由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点: 0,1,……,L(其中L是桥的长度)。 坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。 青蛙从桥的起点开始,不停的向终点方向跳跃。 一次跳跃的距离是S到T之间的任意正整数(包括S,T)。 当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。 题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。 你的任务是确定青蛙要想过河,最少需要踩到的石子数。 【要求】 【数据输入】输入的第一行有一个正整数L(1<=L<=109),表示独木桥的长度。 第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1<=S<=T<=10,1<=M<=100。 第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。 所有相邻的整数之间用一个空格隔开。 【数据输出】输出只包括一个整数,表示青蛙过河最少需要踩到的石子数。 【样例输入】 10 235 23567 【样例输出】 2 数字游戏 Timelimit: 1sMemorylimit: 32768K TotalSubmit: 323AcceptedSubmit: 89 【问题描述】 小W发明了一个游戏,他在黑板上写出了一行数字a1,a2,….an,然后给你m个回合的机会,每回合你可以从中选择一个数擦去它,接着剩下来的每个数字ai都要递减一个值bi。 如此重复m个回合,所有你擦去的数字之和就是你所得到的分数。 小W和他的好朋友小Y玩了这个游戏,可是他发现,对于每个给出的an和bn序列,小Y的得分总是比他高,所以他就很不服气。 于是他想让你帮他算算,对于每个an和bn序列,可以得到的最大得分是多少。 这样他就知道有没有可能超过小Y的得分。 【要求】 【数据输入】 第一行,一个整数n(1<=n<=200),表示数字的个数。 第二行,一个整数m(1<=m<=n),表示回合数。 接下来一行有n个不超过10000的正整数,a1,a2…an,表示原始数字,最后一行有n个不超过500的正整数,b1,b2….bn,表示每回合每个数字递减的值 【数据输出】一个整数,表示最大可能的得分 【样例输入】 3 3 102030 456 【样例输出】 47 速配游戏 Timelimit: 5sMemorylimit: 32768K TotalSubmit: 295AcceptedSubmit: 209 【问题描述】 有这么一个速配电视节目。 N位男士和N位女士要在摄像机前选出他们合适的伴侣。 每位女士按照其对每位男士作为配偶的偏爱程度给每位男士排名次,每位男士也按照其对每位女士作为配偶的偏爱程度给每位女士排名次。 这些名次不允许并列。 然后每位男士将向心仪的对象求婚,经过"残酷"的竞争之后各自找到适合的伴侣。 最开始的时候每位男士都还没有被任何一位女士拒绝。 求婚环节会经过很多轮进行,每一轮: (1)每位男士向还没有拒绝过自己的女士中选出自己认为最理想的一个,并向她
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- acm 编程 比赛 入门 题目