ACM杯比赛往年试题集锦Word格式.docx
《ACM杯比赛往年试题集锦Word格式.docx》由会员分享,可在线阅读,更多相关《ACM杯比赛往年试题集锦Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
![ACM杯比赛往年试题集锦Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/20/8c7d94ce-ceb3-48ad-aa8a-58bf6386ef3a/8c7d94ce-ceb3-48ad-aa8a-58bf6386ef3a1.gif)
每行第一个单词前的空格数不能少于最后一个单词后的空格数,同时前者最多比后者多1。
文本对齐到行的两段边界。
只包含一个单词的行和最后一行左对齐。
不要求左对齐的行有一个特殊的方式来插入空格。
相邻的单词之间可以有多个空格。
对于同一行上两个“空隙”来说,左边不能比右边的窄,同时又不能比右边多2个或以上的空格。
你的程序用贪心的方式工作,也就是说,尽量多的单词应该被放入第一行,然后尽量多的单词应该被放入第二行,如此类推。
行的宽度在你的程序里固定为75个字符。
输入
输入只包含一组占据多行的测试数据。
第一行包含“L”、“R”、“C”和“J”之中的一个字母,分别代表一些文本要被左对齐、右对齐、居中或两边对齐显示。
文本的单词在接下来最多五行中。
同一行中的单词至少被一个空格分隔。
单词只包括ASCII代码在33和126之间的字符,长度小于75个字符。
输出
输出你的小程序产生的对齐显示后的文字。
样例输入
J
Manyyearslater,ashefacedthefiringsquad,ColonelAurelianoBuendiawastoremember
thatdistantafternoonwhenhisfathertookhimtodiscoverice.
样例输出
GlobalNo.
∙Submit
∙Status
∙Clarify
B:
二项式系数
294
53
二项式系数C(n,k)因它在组合数学中的重要性而被广泛地研究。
二项式系数可以如下递归的定义:
C(1,0)=C(1,1)=1;
C(n,0)=1对于所有n>
0;
C(n,k)=C(n−1,k−1)+C(n−1,k)对于所有0<
k≤n。
给出n和k,你要确定C(n,k)的奇偶性。
输入包含多组测试数据。
每组测试数据一对整数n和k(0≤k≤n<
231),占据独立一行。
文件结束符(EOF)表示输入结束。
对每组测试数据,输出一行,包含一个“0”或一个“1”,即C(n,k)除以2的余数。
11
10
21
1
GlobalNo
C:
上下文无关语言
5
1
上下文无关文法是一种强大的描述语言的方法。
许多编程语言的语法,包括在这个在线评测系统上提供了编译器的C、C++、Java和Pascal,都是用上下文无关文法指定的。
在这个题目中,我们用一种生成式的观点来看待上下文无关文法。
一个上下文无关文法由一组用以改写符号串的生成规则组成。
每一条生成规则都有这样的形式:
V→w
其中V是一个符号,w是一个符号串。
符号被分成终结符号和变元两种。
在上面的规则里,V必须是一个变元,而w可以包含变元和/或终结符号。
“上下文无关”表达出这样一个事实:
V总是可以被替换成w,无论它在什么上下文中出现。
在所有变元中,有一个被指定为开始变元。
利用一个上下文无关文法生成一个串,首先要从包含单个开始变元的串开始,连续和任意得应用规则改写串,直到只剩下终结符号。
例如,字母表只包含z,开始变元是S,有下列规则:
1.S→CB
2.S→ZZ
3.A→CB
4.A→ZZ
5.B→ZZ
6.C→BA
7.Z→z
那么我们从S开始,然后选择一个规则来应用。
如果我们选择规则1,就将S替换成CB,得到串CB。
然后,如果我们选择规则6,就将C替换成BA,得到串BAB。
如果我们现在选择规则4,就将A替换成ZZ,得到串BZZB。
我们可以用符号来更简洁的表示这一系列选择:
S⇒CB⇒BAB⇒BZZB⇒ZZZZB⇒ZZZZZZ⇒zZZZZZ⇒zzZZZZ⇒zzzZZZ⇒zzzzZZ⇒zzzzzZ⇒zzzzzz。
这个文法的语言就是所有由一个奇数的两倍那么多个z组成的串的集合。
给出一个上下文无关语言和一些串,判定这些串是否属于这个文法的语言。
为简洁其见,我们将上下文无关文法中所有“→”左边的变元相同的的规则组合到一起。
例如,我们将下面三条规则
S→u
S→v
S→w
组合成
S→u|v|w
上下文无关文法用一种称为Chomsky范式的特殊形式给出。
用Chomsky范式给出的上下文无关文法只包含如下形式的规则:
A→BC
A→a
其中a是任意终结符号,A、B、和C是任意变元,但B和C不能是开始变元。
Chomsky范式还允许规则S→ε,其中S是开始变元,ε表示空串,使得上下文无关文法可以产生空串。
在这个题目中我们忽略这种情况。
输入用Chomsky范式给出一个上下文无关文法和不超过50个串。
我们用单个小写字母作为终结符号,当个大写字母作为变元。
S总是被看作开始符号。
文法用若干行给出。
每一行包含按上述方式组合成的同一个变元的生成规则。
“→”将会被替换成“->
”。
不是所有可能的变元都会在文法中出现,但每个出现的变元都会有至少一条规则。
包含单个“#”的一行表示文法的结束。
在文法后面,每行包含一个串。
当再不能找到任何串时输入结束。
空格和空行不会在输入中出现。
为每个串输出一行。
如果一个串属于给定的上下文无关文法的语言,输出“YES”(不包含括号),否则输出“NO”(不包含括号)。
S->
CB|ZZ
A->
B->
ZZ
C->
BA
Z->
z
#
zzzzzz
a
YES
NO
D:
钻石游戏
33
16
一个钻石游戏是在图1所示的一个分割成数个面的六边形上进行的。
在这个题目里,分隔出来的面按照图中所示方式进行标号。
如果两个面公用一条边,那么成它们为相邻面。
那么,偶数编号的面就有三个相邻面,奇数编号的面只有两个相邻面。
在游戏进行中的任何时刻,七个面中的六个里会有一个唯一的1到6之间的数字,剩下的一个面则是空的。
游戏中的一步就是将一个数字从一个面移动到一个空相邻面。
从任意开始状态出发,通过一系列移动可以让游戏的状态变成如图2、3所示之一。
你的任务就是计算从开始状态出发到达图2中的状态最少需要多少步。
第一行包含一个整数N(0≤N≤5,040),测试数据的数目。
接下来N行每行包含{0,1,2,3,4,5,6}的一个排列,描述游戏的一个开始状态。
排列中的第i个数字表示标号为i−1的面上的数字。
零表示一个面是空的。
对每组测试数据,输出从开始状态到达图2所示状态的最少步数。
如果这是不可能的,输出“-1”。
3
1324506
2410653
0123456
10
-1
E:
边配对
10000ms
0
给出一个有n个顶点、m条边的简单无向连通图,其中m为偶数。
求一个边的一个配对,使得每一对边共用一个顶点。
输入包含一组测试数据。
第一行包含两个整数n和m(3≤n≤20,000,2≤m≤100,000,m是偶数),表示图的大小。
接下来m行,每行包含一对整数a和b,表示一条边(a,b)。
所有顶点从1到n标号。
如果配对存在,输出m⁄2行,每行依次包含三个整数a、b和c,表示两条边(a,b)和(b,c)被配成一对。
如果不存在配对,那么输出“NO”。
710
12
13
24
34
45
46
57
67
25
36
124
134
452
463
576
提示
样例的图示:
F:
足球赛
31
3
NJU和PKUACM-ICPC队的足球迷们打算进行一场足球赛。
因为frkstyc在运动方面相当不济,所以当裁判(Ikki说:
“这是句大实话。
”)。
但是因为他们找不到足够的人来凑足两个11人的队伍,他们决定来玩一个修改版本的点球决胜!
在通常的点球决胜里,球在罚出之前一定要放在禁区里一个划定的点上。
但是对这些球迷来说,这个队守门员未免太没有挑战性了。
所以现在允许主罚点球的球员对球的位置有更多的选择——在一条事先划定的线段上的任意位置都可以。
球员总是想仔细选择球的位置,使得球门对球的张角尽可能地大,那样就有更大的机会把球放进网窝里。
在现实中,要让这个张角真的达到最大几乎是不可能的,因为人的感知看起来总是更能应付模糊的事情,而不是精确的东西。
但是对于你,一个程序设计大赛的选手,应该不是什么难题,因为你有眼前的计算机来帮忙,只要你得到了球门的那条摆球的线段的位置的精确描述。
每组测试数据只有一行,包含四个点A、B、U和V的坐标。
点的坐标用(x,y)的形式给出,由空格分隔。
四个点互不重合。
A和B描述球门。
两根门柱分别位于A和B。
站在A处沿矢量AB→方向看时,球门朝向右侧。
U和V描述摆球的线段。
站在U处沿矢量UV→方向看时,A和B都在左侧。
线段的一部分有可能在球场之外,这部分照样允许摆球。
线段的一部分可能在球门后面,这部分是不允许摆球的。
点的坐标都由不超过10,000的非负整数组成。
对每组测试数据,在线段UV上找一个点P,使得在P处球门AB可以从正面看见,而且角∠APB最大。
如果这样的P不存在,那么认为答案是0。
用度数输出这个角,精确到小数点后三个数字。
允许有0.001°
的误差。
(36,89)(79,97)(11,88)(72,32)
56.167
BA被延长到交UV于R。
当球被放在UR时它处在球门后面,因此是不允许的。
但是它可以放在RV上的任意位置。
在所有的位置中,P使∠APB最大。
P的坐标大约是(42.3679,59.1950)。
G:
Lab杯
142
84
“Lab杯”乒乓球赛就要在PKU的实验室之间举行了。
人工智能实验室的学生都是乒乓球的狂热分子,都强烈希望代表实验室去比赛。
但是有余名额限制,他们之中只能由一个人被选作代表。
为了让选择的过程公平,他们决定打一次单循环赛,每一对学生之间都打一场五局三胜的比赛。
赢得最多比赛的人就将代表实验室去比赛。
现在Ava手里有一份表,表里面记录了每一场比赛的比分。
她应该让谁去比赛?
第一行包含n(2≤n≤100),实验室里学生的数目。
接下来给出一个n×
n矩阵A。
矩阵的每一个元素都是0、1、2、3中的一个。
第i行第j列的元素aij是第i个学生在和第j个学生的比赛中赢的局数。
aij和aji(i≠j)正好有一个是3,另外一个小于3。
矩阵的所有对角线元素都是0。
输出赢了最多比赛的学生的编号。
如果有平分,选择编号最小的。
4
0032
3031
2202
3330
H:
区间
12
2
LogLoader是一家专门提供日志分析产品的公司。
Ikki在做毕业设计的同时,还忙于在LogLoader做实习。
在他的工作里,有一项是要写一个模块来处理时间区间。
这个事情一直让他感到很迷糊,所以现在他很需要你帮忙。
在离散数学里面,你已经学习了几种基本的集合运算,具体地说就是并、交、相对补和对称差。
它们自然地也适用于区间这种特殊的集合。
作为你的快速参考,它们可以总结成下表:
运算
记号
定义
并
A∪B
{x:
x∈A或x∈B}
交
A∩B
x∈A并x∈B}
相对补
A−B
x∈A但是x不属于B}
对称差
A⊕B
(A−B)∪(B−A)
Ikki已经把他的工作里出现的区间运算抽象成一个很小的编程语言。
他想你为他实现一个解析器。
这个语言维护一个集合S。
S一开始是空集,并根据下列命令被修改:
命令
语义
UT
S←S∪T
IT
S←S∩T
DT
S←S−T
CT
S←T−S
ST
S←S⊕T
输入包含一组测试数据,由0到65,535条命令组成。
每条命令占一行,形式如下:
XT
其中X是‘U’、‘I’、‘D’、‘C’和‘S’中的一个,T是一个区间,形式为(a,b)、(a,b]、[a,b)和[a,b]之一(a,b∈Z;
0≤a≤b≤65,535),取它们通常的意义。
命令按在输入中出现的顺序执行。
以一组不相交区间的并的形式输出在最后一条命令执行之后的集合S。
这些区间在一行内输出,由单个空格分隔,按端点的升序排序。
如果S是空集,输出“emptyset”。
U[1,5]
D[3,3]
S[2,4]
C(1,5)
I(2,3]
(2,3)
I:
拼装模型
276
60
Dzx从日本回来了,并为TN准备了礼物----一个恐龙模型。
TN想把它尽快拼好,但是由于模型很庞大,TN又实在比较懒,所以他希望你为他寻找一个最节省时间的拼装方案。
模型是由N个零件组成的,每次TN可以选取两个零件拼装在一起来组成一个新的零件,直到得到完整的模型。
由于零件的复杂程度不同,TN每次拼装所需要的时间也是不同的,对于两个零件A和B,假设他们的复杂程度分别为a和b,则TN要将这两个零件拼装在一起所需要的时间为a+b,而这由两个零件所组成的新零件的复杂程度为a+b。
现在TN已经统计出了每个零件的复杂程度,你能告诉他最快的拼装方发需要多少时间么?
Line1:
N(1<
=N<
=10000),零件数目
Line2:
NIntegers,表示每个零件的复杂程度
最快的拼装方案所需要的时间
129
15
J:
登山
225
117
五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。
同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。
队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?
N(2<
=1000)景点数
N个整数,每个景点的海拔
最多能浏览的景点数
8
186186150200160130197220
K:
选课
155
66
教务网站如期的在选课之日出问题了,这次的问题是登陆窗口的验证码无法显示了,同学们只能靠猜验证码来登陆选课。
教务的登陆系统刚刚经过改进,改进后的验证码均为1..N的一个排列。
一般的同学们在试验的时候都是按照所有排列的字典序逐个试验,但是TN发掘这样试验很乏味,所以他决定每次尝试前一个排列后面的第M个排列。
但是一段时间之后他发现,寻找一个排列后面的第M个排列并不是一件容易的事情,所以他希望你帮助他。
=10000)
M(1<
=M<
=100)
Line3:
1..N的一个排列
所求的排列
5
12345
12453