POJ 1061 青蛙的约会
摘要:得到算式 x + z * m- (y + z * n) = k * Lx- y + z * (m - n) = k * L即z * (n - m)+ k * L = x - y可以用扩展欧几里德了/*Accepted 164K 0MS C++ 633B 2012-10-09 23:38:48 */#include <stdio.h>#include <string.h>#include <stdlib.h>typedef long long LL;LL extgcd(LL a, LL b, LL &x, LL &y){ if(b == 0)
阅读全文
posted @
2012-10-09 23:56
找回失去的
阅读(186)
推荐(0)
国庆七天乐 Day1
摘要:国庆这几天都是做比赛,从今天的情况来说,感觉我还是弱了一点,有些该出的题没做出来,模拟题做得比较少,该考虑的情况没有考虑,所以E题写了一半,脑子就乱了没写下去,交给了队友。有一种感觉是学了的东西用不上,或者说不会用,还有好多东西没学。POJ 3311Hie with the Pie这道题其实隽遒学弟的思路没有错,先floyd求出任意两点间的最短路,然后就是旅行商问题(哈密顿回路),也可以说是状态压缩DP。最多一共就2的11次方乘以10种状态,用f[i][j]表示第i种状态处于j点的最小代价,我们要求的就是f[(1 <<(n + 1) - 1)[0],从零点出发回到零点。#inclu
阅读全文
posted @
2012-10-01 23:43
找回失去的
阅读(206)
推荐(0)
POJ 2449 Remmarguts' Date
摘要:K短路dij+Astar。/*Accepted 9904K 282MS C++ 2223B 2012-09-28 15:30:02*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;const int MAXN = 1 << 10;const int MAXM = 100 * MAXN;typed
阅读全文
posted @
2012-09-28 15:36
找回失去的
阅读(156)
推荐(0)
POJ 3255 Roadblocks
摘要:求次短路径。先求出从1出发的单源最短路,用d[0][i]表示,再求出从N出发的单源最短路,用d[1][i]表示。次短路应该是在d[0][a]+ d[1][b]+w[a][b]中选,先用heap+Dijktra做两遍最短路,然后再求次短路即可。/*Accepted 2792K 110MS C++ 2128B 2012-09-22 10:29:43*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <queue>usi
阅读全文
posted @
2012-09-22 10:31
找回失去的
阅读(692)
推荐(0)
POJ 2728 Desert King
摘要:最优比例生成树,用prim解生成树的权值之和,然后用迭代法求最优比例,也可以用二分法来求比例。lowc[i]=dh[1][i]-x*dl[1][i],高度差-平面距离*比例。/*Accepted 16292K 188MS C++ 1936B 2012-09-22 10:12:11*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <queue>#include <algorithm>#include <math.h>using namespa
阅读全文
posted @
2012-09-22 10:26
找回失去的
阅读(214)
推荐(0)
POJ 3613 Cow Relays
摘要:求s到e经过n条边的最短路,看了08年国家集训队.俞华程的论文《矩阵乘法在信息学中的应用》,其中讲到图的邻接矩阵k次方后,a[i][j]可以表示i到j经过n-1个点的一条路径,结合floyd就能求出我们所需要的结果。/*Accepted 2060K 172MS C++ 1608B 2012-09-15 10:38:47*/#include <stdio.h>#include <string.h>#include <stdlib.h>const int MAXN = 1 << 10;const int MAXD = 105;int hash[MAX
阅读全文
posted @
2012-09-15 10:52
找回失去的
阅读(243)
推荐(0)
POJ 3660 Cow Contest
摘要:题目蛮有意思的,有n头牛进行比赛,他们之间的比赛结果可以传递,比如a战胜了b,b战胜了c,那么也可以推出a战胜了c,问有多少头牛的名次可以确定。名次确定就是它战胜的x头牛+战胜它的y头牛=n-1,出现这种情况+1即可。今天的开胃菜。。。/*Accepted 228K 32MS C++ 1056B 2012-09-03 09:46:55*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 7;int res[MAXN][MAXN];int n, m;
阅读全文
posted @
2012-09-03 10:03
找回失去的
阅读(187)
推荐(0)
POJ 3274 Gold Balanced Lineup
摘要:这个题看了题解之后才会写的,每头牛最多有k个属性,用给出数字的对应二进制位表示,0为没有这种属性,1为具有这种属性。要求的是最长的一个牛的序列,使得每种属性出现的次数相同。参考网上的hash函数ret=((ret<<2)+(a[i]>>4))^(a[i]<<10);用sum[i][j]表示前i头牛的第j种属性出现的次数。用c[i][j]存储sum[i][j]-sum[i][0]的值,代表前i头牛第j种属性出现次数与第0种属性出现次数的差值。如果存在i1和i2,使得c[i1][j]=c[i2][j]0<j<k,i1到i2这一段就是符合要求的一个解。
阅读全文
posted @
2012-08-24 15:27
找回失去的
阅读(162)
推荐(0)
POJ 2002 Squares
摘要:给出n个点,求出用这n个点可构成的正方形的个数。可以枚举两个点,求出正方形的另两个点。然后判断这两个是否存在。我的hash公式写得比较烂,跑了1s多。下面是求正方形剩下两点的公式:已知:(x1,y1)(x2,y2)则:x3=x1+(y1-y2)y3=y1-(x1-x2)x4=x2+(y1-y2)y4=y2-(x1-x2)或x3=x1-(y1-y2)y3=y1+(x1-x2)x4=x2-(y1-y2)y4=y2+(x1-x2)/*Accepted 1724K 1047MS C++ 1713B 2012-08-24 11:46:05*/#include<stdio.h...
阅读全文
posted @
2012-08-24 11:59
找回失去的
阅读(172)
推荐(0)
POJ 3349 Snowflake Snow Snowflakes
摘要:判断n朵雪花中,是否有完全一样的雪花。一道比较简单的hash,我们将雪花的六个边的权值加起来,记为sum,将sum相等的雪花归为一类,再在这里面根据题意找完全相同的,在同类中找到一个角相同的,然后判断顺时针或者逆时针的所有角是否一模一样。/*Accepted 3828K 3204MS C++ 1675B 2012-08-24 10:44:15*/#include<stdio.h>#include<stdlib.h>#include<vector>using namespace std;const int prime = 19999;const int MAX
阅读全文
posted @
2012-08-24 10:55
找回失去的
阅读(338)
推荐(0)
POJ 2492 A Bug's Life
摘要:并查集确定昆虫的关系,题意有点BT...用一个数组rel代表与其父节点的关系,为0则代表相同,为1代表不同。如果两者不在一个集合中则合并,在一个集合中则判断种类是否相同,相同则存在同性恋的虫子。/*Accepted 164K 766MS C++ 1224B 2012-08-24 09:28:15*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 11;int p[MAXN], rel[MAXN];int find_set(int x){ int
阅读全文
posted @
2012-08-24 09:45
找回失去的
阅读(233)
推荐(0)
POJ 1988 Cube Stacking
摘要:进行m次操作,Mxy将包含x的集合移动到y上面,Cx,计算x下面有几个元素。用p[x]表示x的根结点,cnt[x]表示x所在集合的元素个数,top[x]表示x上面有几个元素。每次进行路径压缩时,top[x]都要加上top[p[x]],cnt和p的操作就是并查集的基本操作。最后计算结果是用x所在集合元素的个数-在它之上的个数-它本身。/*Accepted 500K 297MS C++ 1147B 2012-08-24 08:41:18*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int
阅读全文
posted @
2012-08-24 08:56
找回失去的
阅读(678)
推荐(1)
POJ 1067 取石子游戏
摘要:威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。/*黄金分割比例判断是不是非奇异局势,面对奇异局势必败两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜反之,则后拿者取胜。*///公式 ak =[k(1+√5)/2],bk= ak + k/*Accepted 184K 0MS C++ 334B 2012-08-23 16:55:14*/#include<stdio.h>#include<math.h>const double key = (sqrt(5....
阅读全文
posted @
2012-08-23 17:05
找回失去的
阅读(305)
推荐(0)
POJ 2236 Wireless Network 并查集
摘要:并查集判断两个点是否联通,只需看他们的根节点是不是相同。/*Accepted 224K 2688MS C++ 1339B 2012-08-23 16:32:01*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>const double eps = 1e-8;const int MAXN = 1 << 10;int n, in[MAXN], p[MAXN], m;double d;struct point{ double x, y;}t[MAXN
阅读全文
posted @
2012-08-23 16:34
找回失去的
阅读(231)
推荐(0)
POJ 1840 Eqs HASH
摘要:求一个五元三次方程的解的个数,虽然x的范围比较小,但是要枚举五个数字时间复杂度也是100的五次方,肯定会超时,将方程改变下,前两项移到左边,加个负号。这样算的时间复杂度就变成了100^3+100^2,不会超时了,值得注意的是HASH数组很大,用short才不会超出内存。/*Accepted 49136 KB 735 ms C++ 1156 B 2012-08-23 09:16:51*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 25000000;short has
阅读全文
posted @
2012-08-23 12:22
找回失去的
阅读(200)
推荐(0)
POJ 3225 Help with Intervals 线段树区间操作
摘要:/*Accepted 2364K 969MS C++ 2769B 2012-08-22 16:54:26*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;#define lson l, mid, rt << 1#define rson mid + 1, r, rt << 1 | 1const int MAXN = 131072;bool hash[MAXN + 1];int col[MA
阅读全文
posted @
2012-08-22 16:58
找回失去的
阅读(166)
推荐(0)
POJ 3667 Hotel 线段树区间合并
摘要:线段树的区间合并,其中lsum代表区间左边最大连续长度,rsum代表区间最大连续长度,msum代表区间最大连续长度。因为本题是查询连续区间的左端点,那么如果左儿子满足条件,就继续查询左儿子,左儿子不满足条件,就判断左儿子的rsum+右儿子的lsum是不是满足条件,最后才查询右儿子。/*Accepted 2236K 594MS C++ 2574B 2012-08-21 12:15:23*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using nam
阅读全文
posted @
2012-08-22 16:02
找回失去的
阅读(167)
推荐(0)
POJ 2761 Feed the dogs
摘要:求区间第k小,划分树,又一种神奇的数据结构。2104也可以用这个代码AC,那道题是裸的求第k小。#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;const int MAXN = 100010;struct Node{ int l, r;}T[MAXN << 2];int d[MAXN], s[MAXN], t[21][MAXN], tol[21][MAXN];void build(int level,
阅读全文
posted @
2012-08-20 16:58
找回失去的
阅读(349)
推荐(0)
POJ 1182 食物链
摘要:食物链是一道经典的并查集题,这道题难在怎么确定两个动物之间的关系。看了罗德安大神的分析,有种豁然开朗的感觉。问题分析:我们把已经确立了关系的动物分到一个群落里,对于每一个提到的两个数字编号, 看它们是否属于同一个群落,如果是的那么根据它们已有的关系,我们作出相应的判断 即可;若它们属于不同的群落,那么根据互相的关系将两个群落合并;若恰有一个没有 加入到任意一个群落之中,那么将这一个并入另一个的群中即可;若两个都未加入任意 群中,那么我们新建一个群即可。基本思路:这一题的难点在于记录动物之间的关系,即ABC三种动物是循环被吃的,我们用 0,1,2表示,记录在rank[i]中,如果i吃j,则让..
阅读全文
posted @
2012-08-08 15:25
找回失去的
阅读(258)
推荐(0)
POJ 2352 Stars(树状数组)
摘要:星星的级别就是横坐标小于它,纵坐标不大于它的点个数。因为输入是有序的,纵坐标没有起到作用,所以只要注意x值就行了。用树状数组来实现/*Accepted 376K 110MS C++ 774B 2012-08-07 10:58:07*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 15;int T[MAXN], ans[MAXN];int lowb(int t){ return t & (-t);}void insert(int i){
阅读全文
posted @
2012-08-07 12:00
找回失去的
阅读(211)
推荐(1)