第36届ACMICPC网络赛试题大连上海成都.docx

上传人:b****8 文档编号:9647634 上传时间:2023-02-05 格式:DOCX 页数:35 大小:39.83KB
下载 相关 举报
第36届ACMICPC网络赛试题大连上海成都.docx_第1页
第1页 / 共35页
第36届ACMICPC网络赛试题大连上海成都.docx_第2页
第2页 / 共35页
第36届ACMICPC网络赛试题大连上海成都.docx_第3页
第3页 / 共35页
第36届ACMICPC网络赛试题大连上海成都.docx_第4页
第4页 / 共35页
第36届ACMICPC网络赛试题大连上海成都.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

第36届ACMICPC网络赛试题大连上海成都.docx

《第36届ACMICPC网络赛试题大连上海成都.docx》由会员分享,可在线阅读,更多相关《第36届ACMICPC网络赛试题大连上海成都.docx(35页珍藏版)》请在冰豆网上搜索。

第36届ACMICPC网络赛试题大连上海成都.docx

第36届ACMICPC网络赛试题大连上海成都

2011ACM/ICPC网络赛试题(大连站)

1001问题描述

你们记得我们儿时的时光吗?

当我们还是孩子的时候,我们对我们周围的一切事物都感兴趣。

一件小事或一个简单的游戏会使我们愉悦很长时间。

LLL是个淘气的小男孩。

现在,他长大了。

深夜,他经常忘记一些事情,包括他儿时的一个令他非常惬意的简单游戏。

游戏规则如下:

在地上放置有很多砖块,小LLL需要使用这些砖块来盖“摩天大楼”。

砖块分为三种类型,每种类型的砖块都用一个整数d标记。

我们用4个整数ai,bi,ci,di来描述每个砖块的形状。

其中,ai、bi分别表示砖块的长和宽,ci表示砖块的厚度。

我们知道ci必须与地面垂直。

di表示砖块的类型。

1当di=0时,砖块的长和宽一定要大于等于压在它下面砖块的长和宽;

2当di=1时,砖块的长和宽不仅要大于等于压在它下面砖块的长和宽,而且砖块的面积一定要大于压在它下面的砖块面积;

3当di=2时,砖块的长和宽一定要大于压在它下面砖块的长和宽。

现有一些砖块,你知道怎样用它们来盖最高的“摩天大楼”吗?

输入

输入有很多测试实例。

在每个测试实例中,第一行是一个整数n(0<n≤1000),表示砖块的数量。

从第二行至第n+1行,每行表示第i-1块砖块的a,b,c,d(1≤a,b,c≤108,d=0或1或2)。

输入结束标志为n=0。

输出

输出一行一个整数表示使用n个砖块构建的最高“摩天大楼”的高度。

样例输入样例输出

324

1010120

1010121

1010112

211

1010111

1010111

0

1002问题描述

欧拉函数:

(有时称为

函数)是用于求小于n且与n互素的数的个数。

例如:

小于9且与9互素的数是1,2,4,5,7和8,即

HG是XY的主人。

一天,HG想通过一个数学游戏教给XY一些关于欧拉函数的知识。

即HG给出一个正整数N,XY告诉他的主人在不小于2,且不大于N的范围内的数n的值,使得

具有最大值。

很快,HG发现这对于XY似乎是一件易事,因为XY很快就用一段小程序给出了正确答案。

于是,HG使用了一些变化,现在,他要求XY告诉他在不小于2,且不大于N的范围内的数n的值,使得

具有最大值。

这次,由于XY没有充足的知识解决此问题,因此,遇到了一些困难。

现在,他需要你的帮助。

输入

有T(1≤T≤50000)组测试实例,对于每一个测试实例,标准输入n(2≤n≤10100)占一行。

输出

对于每一个测试实例,单行输出上面问题的答案。

样例输入样例输出

106

10030

提示:

如果最大值多于1个,我们输出达到该值的最小的n。

1003问题描述

人们已经在火星上发现了一种新的金矿。

这种金矿呈类点状分布,通过路径将这些点连接起来,形成一棵树的形状。

人们发射了k个机器人到火星上收集这些金矿,不知什么原因,这些机器人着陆的位置S首先被识别了,换句话说,所有机器人应该从S点开始它们的工作。

每个机器人可以从火星上的任何地方返回地球,当然,它们不能再返回火星。

我们已经知道了火星上全部的路径信息。

为了降低全部能量的耗费,我们应该制定一个最佳方案使消耗的能量最小。

输入

输入多个实例。

在每个实例中,

第一行有三个整数N,S,K,分别表示金矿数量、着陆位置和机器人数量;

接下来的n-1行的每一行将给出三个整数x,y,w,表示点x与点y之间有一条路径,需要耗费w。

(1≤N≤10000,1≤S≤N,1≤k≤10,1≤x,y≤N,1≤w≤10000)

输出

对于每个实例,输出一行最小能量耗费值。

样例输入样例输出

3113

121

131

3122

121

131

提示:

在第1个实例中:

1→2→1→3,耗费值为3;

在第2个实例中:

1→2;1→3,耗费值为2。

1004问题描述

一年一度的青蛙王国里的游戏又开始了。

其中,最著名的游戏被称为“铁蛙三项”:

其中的一项比赛是跳远。

这个项目要求参加比赛的青蛙跳过一条河。

河宽为L(1≤L≤109)。

n(1≤n≤500000)个石头从河的一边到另一边依次排列成一条直线,青蛙只能通过跳在这些石头上的方式过河。

如果它们跳到河里了,就出局。

青蛙最多有m(1≤m≤n+1)次跳跃机会,现在,青蛙要知道如果它们要过河,至少它们应该具备什么能力(即青蛙最长的跳远距离)。

输入

输入包括几个实例:

每一个实例的第一行有三个正整数L、n和m,接着有n行,每行表示从开始的河岸到第n个石头的距离,在一个地方不能出现两个石头。

输出

对于每个实例,输出一个整数,表示青蛙至少应具备的能力。

样例输入样例输出

6124

2

253311

11

12

18

1005问题描述

一场战争中,敌人的智能非常重要。

现在,我军已经掌握了敌军区的情况,并且知道这些战区能依靠网络直接或间接通信,我们也知道敌人正准备修建一条新通信线以便增强他们的通信网络。

我们的任务是摧毁他们的通信网络,以便使得他们的一些战区之间不能相互通信。

每一条线有它自己的“摧毁成本”。

若要摧毁一条线,必须花费这条线的“摧毁成本”,必须使用最小的成本完成我们的任务。

可是敌人非常聪明,目前,我们获悉他们已经修建了网络,但是,我们却对敌人准备修建的新线路一无所知。

在这种情况下,你的任务是不论敌人在何处修建新线路,设法找到花费最小成本就可以摧毁他们的通信网络的方法。

请求出最小成本。

为了方便起见,仅能摧毁一条通信线路。

输入

输入包括几个实例:

每一个实例的第一行有2个正整数n,m(1≤n≤10000,0≤m≤10000),分别表示敌人战区(编号从1到n)的数量和敌人已修建的通信线数。

接下来有m行,每行有3个正整数a,b,c(1≤a,b≤n,1≤c≤100000),表示在战区A和战区B之间有一条“摧毁成本”为c的通信线路。

输出

对于每个实例,如果能完成任务,输出最小成本,否则输出-1。

样例输入样例输出

32-1

121

232

433

121

132

143

提示:

对于第二个输入:

敌人可能修建2到3或2到4或3到4的通信线,如果修建2到3的通信线,我们就摧毁1到4的通信线路,成本为3;如果修建2到4的通信线,我们就摧毁1到3的通信线路,成本为2;如果修建3到4的通信线,我们就摧毁1到2的通信线路,成本为1;这样,如果我们要确信能成功摧毁敌人的通信线路,在只可能摧毁一条线路的情况下,所需的最小成本为3。

1006问题描述

小明和小包正在玩一个简单的数字游戏。

在一轮内,小明可以去写下一个数,或者可以问小包第k大的数是什么。

由于小明写下的数太多,小包感到头晕。

现在试着帮助小包。

输入

有几个测试实例。

对于每一个测试实例,输入的第一行有两个正整数n,k。

接下来有n行。

如果小明写一个数,会在小明写下的数旁出现一个“I”。

如果小明问小包问题,会出现一个“Q”,接着,你需要输出第k大的数。

输出

输出是由每一行中得到的最大数构成的。

样例输入样例输出

83

I1

I2

I3

Q1

I4

Q2

I5

Q3

提示:

当小明写下的数的数量小于k时,他不会让小包回答第k个数是多少这个问题的。

(1≤k≤n≤106)

1007问题描述

最近,戴夫比较无聊,他经常来回散步。

他发现有些地方,例如地面上太拥挤了,他情不自禁地想起了近来发生的灾难,拥挤之处不安全。

他知道在地上有N(1≤N≤1000)个人。

现在,他想知道在边长为R(1≤R≤109)的广场上有多少人。

(包括边界)

输入

输入几个实例:

在每个实例中,有2个正整数N和R,接着有N行,每行给出人们的位置坐标(x,y)。

输出

输出边长为R的广场上人数最多的数量。

样例输入样例输出

323

11

22

33

提示:

若有2人站在同一个地方,表示他们在拥抱。

1008问题描述

给你一棵具有N个结点、N-1条边的树,接着问你问题:

“如果以X为整棵树的根结点,哪个结点是Y的儿子结点中具有最小编号的结点?

哪个结点是Y的后裔结点中具有最小编号的结点?

输入

输入的第一行是一个整数T(1≤T≤10),表示实例数;

每一个测试实例的第一行有2个正整数N(2≤N≤100000)和Q(1≤Q≤100000);

测试实例下面的N-1行的每一行有两个整数a(1≤a≤N)和b(1≤b≤N),表示在a和b之间有边相连;

测试实例下面的Q行的每一行有两个整数X(1≤X≤N)和Y(1≤Y≤N,Y≠X),表示一次提问。

输出

对于每次提问,输出在以X为整棵树的根结点的树中,Y的儿子结点中具有最小编号的结点以及Y的后裔结点中具有最小编号的结点。

如果Y没有儿子结点,输出“noanswers!

”。

每个实例后面空一行。

样例输入样例输出

1

73

12

15

23

24

56

57

1233

53noanswers!

3211

1009问题描述

小A在乡村生活。

去年,洪水淹没了该村,于是,今年他们决定将整村的人搬到附近的山上居住。

可是山上没有泉水,因此,每个居民只能挖一口井或从其他居民那里修一条水管线。

如果他们想挖井,则挖井的费用是他们房屋的高度乘以X美元/米。

如果他们想从其他居民那里修一条水管线,如果供水的高度不低于用水的高度,则开通一条水管线的费用是两个居民之间的曼哈顿距离乘以Y美元/米。

否则,如果供水的高度低于用水的高度,则除了需要水管线以外,还需要一个水泵,一个水泵价格Z美元,此外,还需要考虑居民之间的关系,因为有些居民不允许其他居民从他们家修水管线。

现在,已知每个居所的三维坐标(a,b,c),其中c表示高度。

你能计算出要使每个居民都有水,需要整村的人的最低费用吗?

否则,需要告诉领导无论如何,都不能保证每个居民都有水。

输入

输入多个实例:

每个实例的第一行有4个整数:

n(1≤n≤1000)表示居民数,X(1≤X≤1000),Y(1≤Y≤1000),Z(1≤Z≤1000);

接下来的n行的每一行有3个整数a,b,c,表示第i个居民的位置,a,b,c都不超过1000;

接下来的n行描述了居民之间的关系,第n+i+1行代表了第i个居民的关系,这一行将从整数k开始,接下来的k个整数表示能从第i个居民那里修建一条水管线的居民数;

若n=X=Y=Z=0,则表示输入结束,也不会再有输出结果。

输出

对于每个实例,一行输出一个整数,表示要使每个居民都有水,需要整村人的最低费用。

如果方案不存在,即无论如何,都不能保证每个居民都有水,请在一行输出“poor小A”。

样例输入样例输出

210203030

132

241

12

212

0000

提示:

三维空间的点A(x1,y1,z1)与点B(x2,y2,z2)之间的曼哈顿距离是

|x2-x1|+|y2-y1|+|z2-z1|。

1010问题描述

我们已经遇到了关于树方面的很多问题,因此,今天,我们会讨论一个关于树集的查询问题:

有N个结点,每个结点有一个唯一的权值Wi,我们会在其上有4种操作,你应该有效地解决它们。

祝你成功!

输入

在数据集中,有多个测试实例:

对于每个实例,第一行仅有一个整数N(1≤N≤300000)。

接下来的N-1行,每一行有2个整数x,y,表示x与y之间有一条边相连。

这同时表示,我们会首先提供你一棵树;

下一行用N个整数来表示每个结点的权值Wi(0≤Wi≤3000);

下一行有一个整数Q(1≤Q≤300000);

下面的Q行用整数1,2,3或4开始,表示操作类型;

1.给定两个整数x,y,你应该在这两个结点之间构建一条新的边,执行完这个操作以后,将会把原来已有的两棵树连接成一棵新树;

2.给定两个整数x,y,你应该在含有结点x的树集中找到这棵树,将结点x作为该树的树根,然后,删去结点y与其父结点连接的边,执行完这个操作以后,将会使得原来的一棵树分成两个部分;

3.给定三个整数w,x,y,对于结点x,y以及在从结点x到结点y的路径上的所有结点,你应该增加这些结点的权值w;

4.给定两个整数x,y,你应该检查从结点x到结点y的路径上的所有结点的权值,并输出最大的那个权值。

输出

你要输出每一次查询的正确答案;如果你发现本次查询是一次非法操作,输出-1;你要在每个测试实例之后输出一个空行。

样例输入样例输出

5

12

24

25

13

12345

6

4233

212

423-1

135

3214

4147

提示:

我们针对各种不同的操作定义非法情况如下:

在操作1中,如果结点x与结点y属于同一棵树,该操作非法;

在操作2中,如果x=y或者结点x与结点y不属于同一棵树,该操作非法;

在操作3中,如果结点x与结点y不属于同一棵树,该操作非法;

在操作4中,如果结点x与结点y不属于同一棵树,该操作非法。

2011ACM/ICPC网络赛试题(上海站)

1001问题描述

丹尼尔想玩一种特别的棋盘游戏,称为24难题。

24难题是一种游戏,即有数字编号为1到23的棋子摆放在棋盘上摆出以下的图案:

##

######

####

####

######

# #

其中,“#”表示棋子可以放置的位置,有24个位置可以放置棋子。

将空格用0表示。

如果棋子在空格的上、下、左或右,丹尼尔可以将该棋子移到空格处。

通过这种方法,丹尼尔可以将棋盘上的棋子重新排序。

通常,他在最初设定一个目标状态,然后进行一连串的移动棋子达到目标状态。

很快,他发现并非所有的目标状态都能达到。

请你帮他判断是否是一个不可能达到的目标状态。

输入

输入的第一行是一个整数,表示测试用例的数量。

对于每个测试用例,第一行有24个整数表示该游戏的初始状态,数字按照自顶向下,从左至右的的顺序,且空位置用0表示,假设棋子上的数字各不相同,而且必须有一个空格;第二行也有24个整数,表示目标状态。

输出

对于每个测试用例,如果达不到目标状态,单行输出“Y”,否则,输出“N”。

样例输入样例输出

2

01234567891011121314151617181920212223

31204567891011121314151617181920212223N

01234567891011121314151617181920212223

30214567891011121314151617181920212223Y

1002问题描述

这是一场成百万人死亡、毁灭许多城市的残酷战争。

为了停止这场战争,我们来炸毁敌人的基地吧。

在这种情形下,不难发生巷战。

然而,你会遭遇更多困境:

叙述军队的成果。

在轰炸区,指挥官会派遣一群轰炸机去炸毁沿线的所有目标,这些轰炸机都装备有巨大杀伤力的武器。

由于我们的间谍做了杰出工作,敌人全部基地位置已被发现,并且已在地图上标明出来。

因此,会给你提供一份轰炸计划。

特别地,地图是一个绘在二维平面上,标示了敌人基地的一些位置。

依次派遣轰炸机,每架轰炸机将垂直或水平轰炸地图上标明的敌人基地。

你的任务就是记录被每架轰炸机摧毁的敌人基地数量。

注:

已被摧毁的基地不必纳入后面轰炸机执行任务的成果中。

输入

多个测试用例,每个测试用例有两个非负整数N和M(N,M≤100000),分别表示目标基地和安排轰炸任务的轰炸机数量。

在后面N行,每行有一对用一个空格隔开的整数x和y,表示每个敌人基地位置的坐标。

后面的M行描述轰炸机信息,每行有两个整数c和d(c=0or1,|d|≤109),若c=0,则该轰炸机轰炸x=d的敌人基地目标,否则,轰炸y=d的基地目标。

当N=M=0时,输入结束。

测试用例的上限是50。

输出

对于每个测试用例,输出M行,第i行有一个整数,表示输入中对应的轰炸机摧毁的基地数量,在每个测试用例后空一行。

样例输入样例输出

32

12

13

23

012

131

00

1003问题描述

艾莉丝和鲍勃在进行一种二人交替游戏,这种游戏是二维棋盘上开展的。

艾莉丝有许多垂直1*2的棋子,鲍勃有许多水平2*1的棋子。

他们在棋盘上轮流放置他们的棋子,由于棋子不能相互重叠,因此玩家不能在任何失去位置的地方摆放棋子。

这是一个复杂的游戏,他们不可能找到最佳方法。

艾莉丝打算使用一些规模较小的二维棋盘代替大规模的二维棋盘,她设置了许多俄罗斯方块代替初始的二维棋盘。

换句话说,玩家只能在类似于俄罗斯方块棋盘上摆放他们自己的垂直或水平的棋子。

每个玩家可以选择任何一个可能摆放他们自己棋子的位置。

事实上,有以下15种俄罗斯方块形状。

这些形状不能以任何方式改变,包括反射和旋转。

给定每种棋子的数量,你需要判定如果艾莉丝先下棋,并且两个玩家以最佳方式进行游戏时,谁会取胜?

输入

多个测试用例,输入的第一行有一个整数,表示测试用例的数量;对于每种测试用例,仅有一行包括15个整数,表示上面15种俄罗斯方块的数量,所有的数量不超过100。

输出

对于每个测试用例,当两个玩家以最佳方式进行游戏时,若艾莉丝取胜,输出“艾莉丝”,否则,输出“鲍勃”。

样例输入样例输出

3

540000000000000Case#1:

艾莉丝

550000000000000Case#2:

鲍勃

1001000000000002100Case#3:

艾莉丝

1004问题描述

打猎起源于一个名叫DOTA的低级电脑游戏,这种游戏是不能有其他参与者的。

这个游戏的人物中,有两位英雄,名叫DwarvenSniper和Lycanthrope。

Lycanthrope要逃脱追捕,而DwarvenSniper不让他逃。

他会使用银弹朝Lycanthrope仅开一枪的方式击毙Lycanthrope!

是的,这就够了。

如图所示,Lycanthrope以一定的速度和方向直线式逃跑,银弹的狙击范围是L米,DwarvenSniper可以自由地跑一段距离,然后朝Lycanthrope射击。

为了展示其精湛的射术,DwarvenSniper要银弹飞行得尽可能远一些。

由于子弹的重量不可忽略,因此,不会忘记银弹的飞行时间。

由于DwarvenSniper要尽可能快地完成打猎任务,因此,如果有多种方法可以展示其精湛的射术,他会选择最快的一种方法。

在该问题中,我们把银弹和Lycanthrope作为两个点加以考虑。

DwarvenSniper要知道银弹能飞行的最大距离以及打猎行动持续的最短时间。

特别地,整个打猎时间定义为从打猎行动开始到银弹射中Lycanthrope的时间间隔。

你能助他一臂之力吗?

输入

有几个测试用例,每个用例仅占一行,有9个实数,X1,Y1,X2,Y2,Lx,Ly,vD,vB以及L(-10000≤X1,Y1,X2,Y2,Lx,Ly≤10000;0≤vD,vB,L≤100000)。

坐标(X1,Y1)是Lycanthrope的起始位置,坐标(X2,Y2)是DwarvenSniper的起始位置;(Lx,Ly)是Lycanthrope每秒的移动矢量;vD表示DwarvenSniper的速度,vB表示银弹的速度;所有的速度单位是米/秒。

必须满足的前提条件是(Lx*Lx+Ly*Ly)<vD*vD<vB*vB,并且DwarvenSniper的起始位置不同于Lycanthrope的起始位置。

用一行全0表示输入结束。

输出

对于每个测试用例,在一行中输出两个实数S和T,用一个空格隔开,表示在射中Lycanthrope前,银弹飞行了S米,打猎过程持续了T秒,两个数字精确到小数点后3位。

你可以假定DwarvenSniper在109秒内完成他的打猎任务。

样例输入样例输出

-10010102101010.0001.000

0005012666.0003.000

000000000

1005问题描述

最近,Jimmy在学BlueMary的线性代数,并且在修Z教授要求的布尔代数课程。

由于Jimmy完全厌烦两位老师布置的作业,邪恶的Jimmy决定设置一个难题去为难他们,以便报复他们布置的繁重任务。

结果,Jimmy想出一个办法:

将这两门课程的知识结合起来,建立一个复杂的问题:

异或方程系统。

让我们考虑下列方程组:

(a11·x1)∧(a12·x2)∧···∧(a1m·xm)=0

(a21·x1)∧(a22·x2)∧···∧(a2m·xm)=0

···

(an1·x1)∧(an2·x2)∧···∧(anm·xm)=0

该方程组满足以下条件:

1aij取值为0或1,i=1,2,···n,j=1,2,···,m;

2xi是集合Si中的元素,Si是集合{0,1,2,3}的子集,i=1,2,···,m;

3|Si|≤3,i=1,2,···m;

4n=1,2,···,30,m=1,2,···,22。

在方程系统中,运算符“·”表示乘法运算,“∧”是指按位异或。

除了求出上面方程组的结果之外,Jimmy要求老师们计算有多少精确解满足给定方程组。

多么令人困惑的难题啊!

请你帮助Jimmy的老师!

输入

有几个测试用例,输入的第一行是一个正整数T(T≤15),表示测试用例的数目,然后有T个用例。

对于每个用例,第一行有两个整数N和M,分别给出了方程组的两个维度,其中,N表示行数,M表示列数。

接下来的N行,每行有m个整数,i行j列的项表示aij,后M行是对集合Si的描述,起始的整数K表示Si的基数,随后的K个整数表示集合Si的元素。

输出

针对每个测试用例,输出一行一个整数表示这个用例的答案。

样例输入样例输出

1

12

11

30123

2312

1006问题描述

现代高科技的袖珍电话将解锁模式用于解锁系统。

该模式通常使用3*3的点阵。

通过将你的手指移到那些点上,你能生成你个人的解锁模式。

更特别地,首先将你的手指按到任何一个起始点,然后,使用一切可能的方式滑动到下一点,接触到它,依此类推,不准跳跃。

例如,从点1开始,你可以滑动到点2,点4,点5,但是不能直接滑动到点3,点7,点9。

注:

从点1滑动到点6,点8也是可行的,因为这种方式也不被看作是经过其它点的跳跃。

然而,如果某个点在前面已经接触过,就可以跳过该点。

例如,从1-5-9-6起始,你可以直接滑到点4。

这里有一个非常特别的袖珍电话,有一个n*m规模的点阵,一些点是一般点,你可以接触,当前面已经接触过,你可以滑过它们。

一些点是禁止点,你既不可以接触它们,也不可以滑过它们,一些点是不活跃的点,你不能接触它们,但可以滑过它们。

每个点仅能接触一次。

你需要计算有多少种不同的解锁模式能通过所有的一般点。

输入

输入有几种测试用例,每个测试用例起始的一行有两个整数n和m(1≤n,m≤5),分别表示锁键盘的行数和列数。

接下来的n行,每行m个整数kij表示每把钥匙的属性,kij=0表示一般的钥匙,kij=1表示禁用的钥匙,kij=2表示不活跃的钥匙。

一般的钥匙的数量大于0,不超过16。

输出

对于每个测

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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