2012年4月9日
摘要: HDU_2656 由于K比较小,Y也在int的范围内,所以可以不断生成比X大一点的排列,直到生成到第K个为止。#include<stdio.h>#include<string.h>int X, K;struct Integer{ int a[32]; void init(int x) { int i; for(i = 0; i < 32; i ++) { a[i] = x % 2; x /= 2; } } void getnext() { int... 阅读全文
posted @ 2012-04-09 23:35 Staginner 阅读(278) 评论(0) 推荐(0) 编辑
摘要: HDU_3265 如果我们把一个掏了洞的矩形切成4个完整的矩形的话,那么这就跟普通的求矩形面积的并的问题是一样的了。 此外要注意一下中间结果可能会超过int的范围。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 50010int N, D, len[4 * MAXD], cnt[4 * MAXD], E;struct Seg{ int x, y1, y2, col;}seg[8 * MAXD];int cmps(const void *_p, const void *_q){ 阅读全文
posted @ 2012-04-09 10:51 Staginner 阅读(487) 评论(0) 推荐(0) 编辑
摘要: HDU_1828 以前只用离散化的思想写过这个题,现在又结合上线段树重新写了一遍。如果希望只沿一个方向扫描一遍就求出周长的话,那么相当于需要用两种方式分别求水平和竖直部分的周长。比如我们沿x方向扫描,那么竖直方向上的边长就需要通过矩形覆盖扫描线的总长度的变化值来计算,而水平方向上的边长就需要用点数乘以区间跨度去计算。 其实感觉也可以在两个方法中任选一个,分别沿x、y方向各扫描一遍,也可以求出最后的周长。 此外,如果我们沿x方向扫描,并按矩形覆盖的扫描线的总长度的变化值去计算竖直部分的边长的话,那么最初在对线段排序时,同一x值的线段一定要是矩形右边的边在前,是矩形左边的边在后。也就是说同一x.. 阅读全文
posted @ 2012-04-09 00:22 Staginner 阅读(422) 评论(0) 推荐(0) 编辑