2012年8月23日

[最小表示]PKU 3349 Snowflake Snow Snowflakes

摘要: 最小表示法 + 排序 + 枚举, 整体复杂度:O(n*lgn*6)这道题普通的枚举就可以做,hash 和枚举差不多,繁琐的地方都在判断是否同构那里,我干脆用最小表示法把原串转换为原串的最小表示和反串的最小表示中的较小者,然后排序,枚举相邻的位置的串是否相等;最小表示法的一点更正:这篇博文中作者做了一个优化,我以前是参考优化后的做法写的,现在发现评论中有人提到了一个问题(最小位置直接出现在对升序序列后的情况下,这个优化实际上使复杂度变为了O(n^2),已经验证),把 j 减少到 i+1 不合理,所以又回到了原始的做法,具体见代码。# include <stdio.h># includ 阅读全文

posted @ 2012-08-23 22:41 getgoing 阅读(396) 评论(0) 推荐(0) 编辑

[二分] PKU 1840 Eqs

摘要: 二分:3+2;# include <stdio.h># include <stdlib.h># define trq(x) ((x)*(x)*(x))int a[5];long long ans = 0;int h[105];int f[305*105*105], g[305*105];/************************************************************/int cmp(const void *x, const void *y){ return *(int*)x - *(int*)y;}int bins(int *v 阅读全文

posted @ 2012-08-23 17:15 getgoing 阅读(226) 评论(0) 推荐(0) 编辑

[hash] PKU 2002 Squares

摘要: 此题数据范围其实很小,枚举主对角线,求出另两个点的坐标,看是否存在(所有点都不相同);hash的模版写法:# include <stdio.h># include <string.h># define odd(x) (((x)+100000)&0x1)# define MAXN 1005# define MOD 10007int n;int x[MAXN], y[MAXN];int head[MOD], next[MAXN];int hash(int xx, int yy){ int hkey = xx*13131 + yy; return (hkey%MOD 阅读全文

posted @ 2012-08-23 15:26 getgoing 阅读(234) 评论(0) 推荐(0) 编辑

[数组hash] PKU 3274 Gold Balanced Lineup

摘要: 题解;数组hash:hash的是排列,不能用相加、相乘取模,常用hash函数的资料; 1 # include <stdio.h> 2 # include <string.h> 3 4 # define get(x, i) ((((x)>>(i))&0x1) ? 1:0) 5 6 # define N 100005 7 # define K 35 8 # define MOD 100007 9 10 int sum[N][K], c[N][K], a[N], h[MOD << 3];11 12 int Max(int x, int y)13 阅读全文

posted @ 2012-08-23 10:08 getgoing 阅读(235) 评论(0) 推荐(0) 编辑

导航