摘要:
题目大意:有一篇凹凸不平的矩形地面,面积为m*n,被分为M*N个小正方形,每个正方形有不同的高度,如图所示给出矩形中每个正方形的高度,若一场雨后,这块矩形地面最多能积多少体积的水。解题思路:不断地去找最低的那个小块进行灌水,这是肯定的。由于需要一直找最小值,所以用到最小堆来进行优化。初始化,边界是肯定不能积水的,因为肯定会流出来。所以在一开始所有的边界都设置为已访问标记。将边界上所有的点都加进堆里,并不断地调整堆。在边界中取最低的那一个小块进行扩展,记录这个最小的节点高度为t,扩展到的内部节点如果比t小,那么就灌水,也就是将扩展到的节点高度上升到t,不要忘了统计ans。并同时将上升后的点加进堆
阅读全文
posted @ 2011-08-11 19:48
Viaky
阅读(548)
推荐(0)
编辑
摘要:
题目大意:在坐标系中给出若干个点的坐标,圆的直径为d且圆的圆心在x轴上,求使用圆的个数最少使得所有点都被覆盖掉。如果无论多少个圆都覆盖不了所有的点,就输出-1.解题思路:这题乍看起来真的很像几何啊几何。但事实上跟几何没有多大关系。圆心在x轴上,给出了每个点的坐标,也就是点到x轴和y轴的距离是已知的。那么我们把当前点的在x轴上的横坐标作为圆心,根据给出的半径可以画出两个大小相同,方向不同三角形,三角形的三边长分别为直径d,到x轴的距离y,以及我们需要求的第三边。根据这个第三边可以确定一个区间。记录这个区间的左端点和右端点,整个问题就变成了用最小的点覆盖所有的区间的问题。这种问题话说是有很多很多的
阅读全文
posted @ 2011-08-11 18:55
Viaky
阅读(557)
推荐(0)
编辑
摘要:
题目大意:给出一个数列,要求选出若干个数,这些数可以相邻也可以不相邻,这些数满足相邻的两个数不能互质,求最多有多少个数满足要求。【数列中1的情况是存在的】。数据范围:n<=100000,数列中的数<=100000例如:给出6个数的数列:6,2,3,15,8,5,那么满足要求的解就是4,即6,3,15,5解题思路:首先用到了分解质因数:朴素的分解质因数代码如下:【From百度百科】应该很好理解。 1 var 2 n,i:longint; 3 begin 4 readln(n); 5 write(n,'=1'); 6 i:=2; 7 while i<=n do b
阅读全文
posted @ 2011-08-11 18:53
Viaky
阅读(788)
推荐(0)
编辑