2011百度之星程序设计大赛初赛A

第一题:图标排列

百度应用平台上有很多有趣的应用,每个应用都由一个开发者开发,每个开发者可能开发一个或多个应用。百度的工程师们想把应用尽可能好的推荐给用户。

研究发现,同一个开发者开发的程序的图标有很大的相似性。如果把同一个开发者开发的应用放在一起,用户很快就会厌倦相似的图标,如果把这些图标穿插摆放效果就会好很多。

现在工程师想给用户推荐来自m个开发者的n个应用,在推荐的时候这些应用的图标将排成整齐的一行展示给用户,相邻两个图标之间的距离正好是1,工程师们想让这些图标尽可能的穿插摆放。为了衡量穿插摆放的效果,给每个图标定义一个“分离度”,分离度的值是指当前图标和它左边最近的来自同一个开发者的图标之间的距离。如果一个图标左边没有来自同一个开发者的图标,则分离度为0。所有图标穿插摆放效果的值定义为所有图标的分离度之和。

已知每个开发者开发的应用个数,请帮助百度的工程师找到图标穿插摆放效果的最大值。

输入描述

输入的第一行包含两个整数n和m,用一个空格分隔,分别表示应用的个数和开发者的个数。

第二行包含m个正整数,相邻两个数之间用一个空格分隔,表示每个开发者开发的应用个数,这些整数之和必然等于n。

输出描述

输出一个整数,表示图标穿插摆放效果的最大值。

样例输入

8 3

3 3 2

样例输出

15

提示

对于20%的数据,n≤ 10;

对于40%的数据,n≤ 100。

对于100%的数据,1≤ m ≤ n ≤ 100,000

第二题:篮球场

百度公司有一块长a米宽b米的矩形空地,空地的左上角坐标为(0,0),右下角坐标为(a,b)。空地上长着n株灌木,每株灌木都非常小。现在百度公司准备清理掉其中的一些灌木,在空地上修建两个长28米宽15米的篮球场。

球场必须完全修建在空地内部(边缘可以和空地的边缘重合)且球场边缘必须与空地边缘平行,两个篮球场不允许重叠(不考虑边缘)。

在清理灌木的时候,只有球场内部的灌木需要清理掉,球场外部和边缘的灌木不用清理。请帮助百度公司找到一种球场的建设方案,使得需要清理的灌木最少。

注意:在最优方案中球场的左上角坐标可能是实数。

输入描述

输入包含多组数据。

每组数据的第一行包含两个整数a、b,表示空地的长和宽。

第二行包含一个整数n,表示空地上灌木的数量。

接下来n行表示所有灌木的坐标,其中第i行包含两个整数xi、yi,表示第i个灌木的坐标为(xi,yi)。

最后一组数据之后的一行为两个0,表示输入结束。

 

输出描述

 

对于每组数据,输出一个整数,表示最少需要清理多少株灌木。

样例输入

50 40

3

11 17

24 26

36 20

0 0

样例输出

 

1

提示

空地、灌木和最优的球场修建方案如下图所示。对于100%的数据,30≤ a, b ≤ 100,灌木的坐标都不相同。

第三题:度度熊大战僵尸

 

僵尸最近老在百度大厦附近出没,因此公司派出了度度熊去消灭他。

 

度度熊有n件武器,第i件武器有物理攻击力Ai和魔法攻击力Bi。在某个时刻t,武器能造成的伤害为Ai+ Bi *t。僵尸有一个初始血量值H,受到武器的攻击后,血量会减去武器的当前伤害值。如果某个时刻僵尸的血量值为负,则僵尸将原地满血复活为血量值H。因此为了消灭僵尸,度度熊的最后一击,必须恰好使僵尸的血量为0。

从时刻1开始的每个整数时刻,度度熊可以从自己的武器中挑选一个武器攻击僵尸一次,也可以不攻击僵尸。一件武器可以在不同的时刻使用多次。

由于度度熊武器的限制,不是每个血量的僵尸都能杀死。度度熊希望能知道能杀死的僵尸中第k小的血量值是多少。

 

输入描述

 

输入的第一行包含两个整数n,k,分别表示度度熊拥有的武器数和要求的血量是第几小的。

接下来n行表示度度熊拥有的武器,其中第i行包含两个整数Ai,Bi,表示第i个武器的物理和魔法攻击力。

 

输出描述

 

输出包含一个整数,表示度度熊能杀死的僵尸中第k小的血量值。

 

样例输入

 

2 8

1 3

3 5

 

样例输出

 

15

提示

 

度度熊能杀死的僵尸中前8小的血量值依次为4,7, 8, 10, 11, 13, 14, 15。

对于100%的数据,1 ≤ n ≤ 10,1 ≤ k ≤ 50,000,0 ≤ Ai, Bi ≤ 10,000。

VN:F [1.9.4_1102]
原文地址:https://www.cnblogs.com/kuangbin/p/2078579.html