2012年9月27日
摘要: POJ_3668 可以先将所有的直线求出来,然后按斜率排个序,之后顺序扫描一遍就可以统计出结果了。#include<stdio.h>#include<string.h>#include<algorithm>#define MAXD 210struct Point{ int x, y; bool operator < (const Point &t) const { if(x == t.x) return y < t.y; return x < t.x; }}p[MAXD];struct Vector{ int x, y; bool. 阅读全文
posted @ 2012-09-27 23:37 Staginner 阅读(414) 评论(0) 推荐(0) 编辑
摘要: POJ_1274 直接用匈牙利算法求二分图的最大匹配即可。#include<stdio.h>#include<string.h>#define MAXD 210int N, M, g[MAXD][MAXD], visy[MAXD], yM[MAXD];void init(){ int i, j, n, x; memset(g, 0, sizeof(g)); for(i = 1; i <= N; i ++) { scanf("%d", &n); for(j = 0; j < n; j ++) { scanf(... 阅读全文
posted @ 2012-09-27 23:36 Staginner 阅读(166) 评论(0) 推荐(0) 编辑
摘要: UVALive_4981 首先判断一个括号序列是否合法,可以用一个栈来实现。 为了让字典序只大那么一点点,必然保留的前缀长度越长越好,因此可以枚举保留的前缀的长度,接着,除去前缀的下一个字符应该大得越少越好,这一点也可以枚举,如果此时依然合法的话就要看剩下的字符的数量能否让栈中的左括号全部出栈,如果不行的话显然也是不合法的。如果还有多余的字符呢?由于我们已经让前缀的下一个字符比原来的这个位置的字符大了,那么后面的字符的字典序就应该越小越好,所以我们应该在紧邻的位置补类似ae、aaee、aaaeee这样的东西,至于补多长就要依剩余的字符的数量而定了。#include<stdio.h> 阅读全文
posted @ 2012-09-27 12:21 Staginner 阅读(333) 评论(0) 推荐(0) 编辑