2012年2月21日
摘要: POJ_3695 一个直观的思路就是对每次Query求一次这些矩形面积的并,具体的思路可以参考我的POJ_1151的题解,那个题也是求矩形面积的并的。但这样耗时会比较长,我暂时还没想到太好的思路。 http://www.cnblogs.com/staginner/archive/2012/02/20/2359396.html#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 50struct rec{ int x1, y1, x2, y2;}p[MAXD], res[MAXD]; 阅读全文
posted @ 2012-02-21 22:24 Staginner 阅读(485) 评论(0) 推荐(0) 编辑
摘要: POJ_1434 一开始的思路是把w*d看成一个量,这样长方体就变成了长方形,体积也就可以用面积表示了,然后将b离散化,用线段树计算出每个高度区间内有多大面积,然后沿高度由小到大计算一下如果水淹到当前区间需要多少体积,就可以算出最后的水位。 但实际上有更直接的算法,直接二分水位的高度然后判断水装入容器后是否恰好到这个高度即可。#include<stdio.h>#include<string.h>#define MAXD 50010#define zero 1e-8#define INF 2000000struct cistern{ int b, h, s;}c[MAXD 阅读全文
posted @ 2012-02-21 11:25 Staginner 阅读(372) 评论(0) 推荐(0) 编辑
摘要: POJ_2002 首先一个很直观的思路就是枚举4个顶点,然后判断是否能构成正方形,但是这样的复杂度十分高。 但实际上对于确定一个正方形来说,只要有对角线上的两个点就可以了,或者一条边上的两个点也可以,只不过这时就有两种可能罢了。于是我们不妨只枚举两个顶点,然后去查找另外两个顶点是否存在。 对于查找顶点当然可以排序后二分,但也有更直接一点方法,用哈希表存即可。#include<stdio.h>#include<string.h>#define MAXD 1010#define HASH 100003struct point{ int x, y;}p[MAXD];int N 阅读全文
posted @ 2012-02-21 10:10 Staginner 阅读(177) 评论(0) 推荐(0) 编辑