COCI 2017/2018 Round #1, October 14th, 2017
(请选手务必仔细阅读本页内容)
竞赛时间:2017年11月8日13:00~16:30
一.题目概况
题目名称 |
Cezar |
Tetris |
Lozinke |
Hokei |
Deda |
Plahte |
子目录名 |
cezar |
tetris |
lozinke |
hokei |
deda |
plahte |
可执行文件名 |
cezar |
tetris |
lozinke |
hokei |
deda |
plahte |
输入文件名 |
cezar.in |
tetris.in |
lozinke.in |
hokei.in |
deda.in |
plahte.in |
输出文件名 |
cezar.out |
tetris.out |
lozinke.out |
hokei.out |
deda.out |
plahte.out |
每个测试点时限 |
1.0秒 |
1.0秒 |
1.0秒 |
1.0秒 |
1.0秒 |
2.0秒 |
测试点数目 |
33 |
13 |
23 |
13 |
9 |
18 |
总分值 |
50 |
80 |
100 |
120 |
140 |
160 |
附加样例文件 |
无 |
无 |
无 |
无 |
无 |
无 |
结果比较方式 |
全文比较(过滤行末空格及文末回车) |
|||||
题目类型 |
传统型 |
传统型 |
传统型 |
传统型 |
传统型 |
传统型 |
二.提交源程序文件名
对于Pascal 语言 |
cezar.pas |
tetris.pas |
lozinke.pas |
hokei.pas |
deda.pas |
hokei.pas |
对于C 语言 |
cezar.c |
tetris.c |
lozinke.c |
hokei.c |
deda.c |
hokei.c |
对于C++ 语言 |
cezar.cpp |
tetris.cpp |
lozinke.cpp |
hokei.cpp |
deda i.cpp |
hokei.cpp |
三.编译命令(不包含任何优化开关)
对于Pascal 语言 |
fpc cezar.pas |
fpc tetris.pas |
fpc lozinke.pas |
fpc hokei.pas |
fpc deda.pas |
fpc plahte.pas |
对于C 语言 |
gcc -o cezar cezar.c -lm |
gcc -o tetris tetris.c -lm |
gcc -o lozinke lozinke.c -lm |
gcc -o hokei hokei.c -lm |
gcc -o deda deda .c -lm |
gcc -o plahte plahte.c -lm |
对于C++ 语言 |
g++ -o cezar cezar.cpp -lm |
g++ -o tetris tetris.cpp -lm |
g++ -o lozinke lozinke.cpp -lm |
g++ -o hokei hokei.cpp -lm |
g++ -o deda deda.cpp -lm |
g++ -o plahte plahte.cpp -lm |
四.运行内存限制
内存上限 |
64MB |
64MB |
64MB |
64MB |
64MB |
512MB |
注意事项:
1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、除非特殊说明,结果比较方式均为忽略行末空格及文末回车的全文比较。
3、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
4、统一评测时采用的机器配置为:CPU Intel(R) Celeron(R)G3900 @ 2.8GHz,内存 4G,上述时限以此配置为准。
5、只提供Linux格式附加样例文件(每题提供4个附加样例)。
6、特别提醒:评测在Windows下进行,评测软件为CCR Plus。
Cezar
(cezar.cpp/c/pas)
【题目描述】
小凯撒喜欢纸牌游戏。每次他来到萨格勒布,他都会和他的朋友们一起玩《21点》。
在这个游戏中,玩家抽牌的时候,他手里的牌的总和小于或等于21,或者直到他说“DOSTA”(克罗地亚语为“停止”)。
在比赛开始时,在甲板上有52张牌,每一套有13个等级。卡片等级是2、3、…,10,杰克,王后,国王和Ace。卡值如下:有数字的卡片值这个数字(例如,“9”是9),有图片的卡片(杰克、皇后和国王)值10,而Ace是值11。
恺撒发现自己的处境很有趣。在游戏中,他已经画了N张卡,其总和小于或等于21,现在已经开始考虑是否再画一张牌。让我们假设X是到目前为止的21点的差值。每个人都知道,如果牌中剩余的牌数大于X的牌数≥X的牌数小于等于X的牌数,那么你就不画牌了。
由于凯撒很难计算他是否需要再画一张牌,他要求你为他做。
【输入格式】
输入的第一行包含正整数N,卡片凯撒吸引了到目前为止的数量。
下面的每个N行包含一个正整数,ai的值,表示到目前为止凯撒画的牌的数量。
【输出格式】
如果凯撒应该再画一张牌,输出“VUCI”(克罗地亚语为“画”),否则输出“DOSTA”(克罗地亚语为“停止”)。
【样例输入1】
6
2
3
2
3
2
3
【样例输出1】
DOSTA
【样例输入2】
1
10
【样例输出2】
VUCI
【样例输入3】
2
5
6
【样例输出3】
VUCI
【样例解释】
第一个测试样例:甲板和一个值大于6有32张(4个Ace,4个国王,4个皇后,4个杰克,4个十,4个九,4个八和4个七),而卡在甲板上的数量值小于或等于6有14张(1个二,1个三、4个四、4个五和4个六)。
【数据范围】
对于100%的数据:1≤N≤52,2≤ai≤11;
Tetris
(tetris.cpp/c/pas)
【题目描述】
Ivica是一位充满激情的计算机科学家。他最近开始了他的第一个电脑游戏:一个流行的俄罗斯方块的克隆。虽然他远未完成,项目支持将五个不同的俄罗斯方块图如下图所示的矩阵。在把它放入俄罗斯方块矩阵之前,这个图形可以任意旋转90度,并且上色。此外,这个游戏的当前版本不支持把这个图形置于矩阵的边界之外或者在矩阵里与另一个存在的图形重叠。
Figure1 Figure2 Figure3 Figure4 Figure5 (格式有点问题,见谅)
当Ivica在学校的时候,他的妹妹Marica开始了游戏,并随机地旋转,着色,并把图形画上不同的颜色上。如果它们有一个共同的边或接触点,那么两个图形相邻。
当Ivica回到他的电脑前,他发现了他的妹妹所做的图形。他想知道在俄罗斯方块矩阵中有多少个图形,他请你帮他解决这个问题,因为他在忙着改进游戏。
【输入格式】
输入的第一行包含正整数N和M代表俄罗斯方块矩阵的行和列的数量。
下面的N行包含代表矩阵的M个字符。每个字符都可以是 ”.” (dot),表示空白空间或表示图形一部分的英文字母的小写字母。不同的字母代表不同的颜色,同一图形每部分颜色相同。
【输出格式】
您必须输出正好5行。第i行必须包含在俄罗斯方块游戏中第i个数字的出现次数。
【输入样例1】
4 5
aaaa.
.bb..
.bbxx
...xx
【输出样例1】
2
1
0
0
0
【输入样例2】
4 5
.aab.
aabb.
.cbaa
cccaa
【输出样例2】
1
0
1
1
1
【输入样例3】
5 7
.c.....
ccdddd.
caabbcc
aabbacc
...aaa.
【输出样例3】
1
1
2
1
1
【样例解释】第三个测试样例:下图描述了当Ivica回到他的计算机时,俄罗斯方块矩阵的样子。
【数据范围】
对于20%的数据:只有第一个数字会出现。
对于40%的数据:只有前两个数字会出现。
对于60%的数据:只有前三个数字会出现。
对于80%的数据:只有前四个数字会出现。
对于100%的数据:1≤N,M≤10;
Lozinke
(lozinke.cpp/c/pas)
【题目描述】
最近,超级流行的社交网络秘密网络出现了用户信息的泄露。
在机密信息中是所有用户的密码。
Mihael,一个最近一直在探索计算机安全的年轻学生,发现整个事情非常有趣。在尝试社交网络时,他发现了另一个安全漏洞!当你输入任何字符串时
当一个子字符串等于实际的密码时,登录将会成功。例如,如果密码为abc的用户输入了一个字符串abc、abcd或imaabcnema,系统将成功地将其登录,而axbc的登录将失败。
Mihael想知道有多少个不同用户的有序对,第一个用户使用自己的密码可以作为第二个用户登录。
【输入格式】
输入的第一行包含正整数N,表示用户的数量。
下面的每个N行都包含用户密码。
密码至少有一个和十个英文字母的小写字母。
【输出格式】
输出共一行,输出来自任务的有序对的数量。
【输入样例1】
3
aaa
aa
abb
【输出样例1】
1
【输入样例2】
3
x
x
xy
【输出样例2】
4
【输入样例3】
5
mir
mirta
ta
ir
t
【输出样例3】
6
【样例说明】
第二个测试样例:第一个用户可以作为第二个用户登录,第二个用户可以作为第一个用户登录,第三个用户可以作为第一个用户和第二个用户登录。
【数据范围】
对于100%的数据:它将保持1≤N≤20,000。
Hokej
(hokei.cpp/c/pas)
【题目描述】
一场大型马拉松冰球锦标赛即将举行。就像在马拉松冰球比赛中经常出现的情况一样,比赛时长为M分钟。在球场上(冰),就像普通的冰球一样,每一个时刻,每个队有6名队员。然而,一场马拉松冰球比赛可以持续很长一段时间,所以教练们带了一群球员在公共汽车和飞机上,这样他们就可以在球员疲惫的时候进行替换。
其中一位教练是我们故事的英雄,他的名字叫Ante。在比赛中,Ante把N个球员带到了赛场。对于每个球员,他知道两件事:球员质量K和球员耐力I。球员的耐力是球员在比赛中可以比赛的总时间。如果球员打了X分钟,然后在板凳上休息,然后再打Y分钟,他的总上场时间是X + Y。当一个球员的总分钟数等于他们的耐力时,他会感到疲倦,不能继续比赛,所以在那一刻,需要有人来代替他,否则他会在冰上昏倒,最后在医院(马拉松冰球是一种危险的游戏)。
在一分钟的比赛中,球队的质量是球队球员的质量的总和。他不是一个伟大的教练,所以他要求你拿出最初的6名球员和替补上场时间,这样他就能在比赛的所有分钟内达到球队质量的最大可能的总和Z。有保证的是,在每分钟有六名球员参加比赛是有可能的。
例如,如果游戏持续3分钟,如果在第1分钟,团队的quailty是15,在第二个12中,在第三个14中,Z将等于15 +12+14=41。
请注意:在马拉松冰球比赛中,没有守门员,因为这样比赛很才会更有趣!
【输入格式】
输入的第一行包含正整数M和N,游戏的时间在M分钟内,参加的队员数量N。
以下N行每行包含两个正整数,K和I,表示球员的质量和耐力。
玩家的编号从1到N,按照输入的顺序(第一个队员的B编号是1,第二个是2,以此类推)。
【输出格式】
输出的第一行必须包含来自任务的最大可能Z。
第二行输出必须包含6个数字——即开始游戏的6个队员的编号。
第三行输出必须包含取代B的数量,不能超过3 *N。
必须包含以下B行,为了从最早的最新替补队员, 替补队员的信息,每代三个数,X(1≤X < M),A和B,其中X是替补队员加入游戏的时刻,A是退出比赛,并进入板凳席的球员编号,B是将加入比赛的球员的编号。允许在同一分钟内进行多次替换,但玩家不能进入游戏,然后在同一时间退出,反之亦然。
如果存在多个解决方案,则输出任何。
【输入样例1】
200 6
3 200
4 200
5 200
6 200
7 200
8 200
【输出样例1】
6600
1 2 3 4 5 6
0
【输入样例2】
9 9
10 3
9 3
13 9
5 3
15 9
100 9
3 6
2 6
1 6
【输出样例2】
1260
1 2 3 4 5 6
3
3 1 7
3 2 8
3 4 9
【输入样例3】
3 9
100 3
100 3
100 3
100 3
100 2
100 1
50 1
30 2
1 1
【输出样例3】
1610
1 2 3 4 5 6
2
1 6 8
2 5 7
【样例解释】
第一个测试案例的说明:不需要替补队员,所有队员从头到尾都在比赛。
【数据范围】
对于100%的数据:1≤I≤M≤500,000,6≤N≤500,000,100≤K≤100;
Deda
(deda.cpp/c/pas)
【题目描述】
小Marica创作出了一个荒谬的不寻常的童话,告诉她祖父保持打断她和问她愚蠢的耐人寻味的问题。
在Marica的童话故事,N的孩子,从1到N年龄表示(从最小的年龄1,到最大的年龄N表示),踏上了火车。列车从0号站上离开,在1,2,3…到无穷号站上停。
下面的每个Marica的报表的形式是:“在X停止时,一个孩子下车”。在这些语句的顺序是任意的。换句话说,它不取决于车站的顺序。她的祖父有时会问的问题的形式:“到目前为止,孩子们大于或等于B且最小的年龄,在Y站及之前下车的孩子中?”如果此刻爷爷问了一个问题,到目前为止还没有一个孩子下车的火车,我们就假定孩子是无限的。
Marica必须给一个正确的答案对于每个她祖父的问题,否则爷爷会生气睡觉。答案必须正确,当爷爷问的问题,虽然它以后可以给Marica的新报表的变化,但这并不重要。写一个程序,跟踪Marica的陈述和回答她祖父的问题。小 Marica作出了一个荒谬的不寻常的童话,告诉她祖父保持打断她和问她愚蠢的耐人寻味的问题。
【输入格式】
输入的第一行包含正整数N和Q,孩子的数量和语句的数量。每条Q线描述:
●Marica的声明的形式“M”X A,“M”代表Marica,X和A是正整数。
●或她祖父的形式“D”Y B的问题,“D”表示的祖父,Y和B是正整数。
Marica的所有语句都对应着不同的孩子,输入中至少有一行是她祖父的问题。
【输出格式】
对于每个祖父的问题,输出答案。如果没有答案,输出- 1。
【输入样例1】
3 4
M 10 3
M 5 1
D 20 2
D 5 1
【输出样例1】
3
1
【输入样例2】
10 10
M 20 10
D 1 9
M 2 3
D 17 10
M 20 2
D 8 2
M 40 1
D 25 2
M 33 9
D 37 9
【输出样例2】
-1
-1
3
2
9
【数据范围】
对于100%的数据:2≤N,Q≤200 200,1≤X,Y≤1,000,000,000,1≤A,B≤N;
Plahte
(Plahte.cpp/c/pas)
【题目描述】
有一天,小Donald决定洗掉他所有的白床单(共N条)。洗完后,他把它们放在后院的地上晾干。Donald把被单放在上面,这样他们就不会接触到任何尖端或侧面,也没有任何一个侧面相交,但他有可能把较小的薄片放在较大的床单上,或者一张床单完全覆盖另一张床单。这样做之后,Donald上床睡觉了。
Donald的朋友Kim不知怎么地得到了Donald正在烘干他的床单的信息,并决定把他弄得一团糟。他在阁楼上找到了他父亲的一支彩弹枪。在枪的同时,有不同颜色的M彩弹球,但有可能有更多的球有相同的颜色。Donald一睡着,Kim就走进他的后院,开始用他的彩弹枪扫射床单。我们都知道床单会“流血”,所以当Kim打到最上面的床单时,球的颜色往下渗到所有的床单上。在Kim用完所有的彩弹球后,他高高兴兴地离开了Donald的后院。
当Donald醒来,去拿他的床单时,他感到震惊。在Donald的大部分床单上,有许多新的颜色。由于Donald对正确的数据非常感兴趣,他很震惊,而且无法思考,他要求你告诉他每张床单上的新颜色的数量。
我们可以把Donald的后院作为一个无限的坐标系,把被单当做平行于坐标轴的矩形。Kim的彩弹球可以用坐标系中的点来表示。
请注意,Kim的彩弹球有可能没击中所有的床单,但每一针的坐标都是独一无二的。
【输入格式】
输入的第一行包含正整数N(1≤N≤80 000),表的数量,和M(1≤M≤80 000),彩弹球的数量。
下面 N行包含四个数字:左下角的坐标Ai,Bi我(1≤Ai,Bi≤10^9)和右上角Ci,Di,(≤1 Ci,Di≤10^9)我的表。
下面M行Kim彩弹球落下的坐标,Xj ,Yj(1≤Xj,Yj≤10^9),和Kj(1≤Kj≤10^9),表示第j个球的颜色编号。
【输出格式】
共N行,第i行必须包含第i张床单上的新颜色的数目。
【输入样例1】
2 2
1 1 3 3
5 6 10 10
3 3 1
5 1 2
【输出样例1】
1
0
【输入样例2】
3 3
1 1 7 7
2 2 6 6
3 3 5 5
4 4 1
2 6 2
4 7 3
【输出样例2】
3
2
1
【输入样例3】
1 3
1 1 7 7
2 6 2
4 7 3
4 4 1
【输出样例3】
3
【样例解释】
澄清测试用例:射击的次数表示子弹的颜色。
试卷和数据资源下载地址:http://download.csdn.net/download/qq_41357771/10178293
代码和题解资源下载地址:http://download.csdn.net/download/qq_41357771/10204895
以后还会翻译更多的试卷哦!