IT民工
加油!
上一页 1 2 3 4 5 6 7 8 9 ··· 29 下一页
摘要: 线段树求一个点所处区间的最大连续长度,用lsum记录区间的左连续长度,rsum记录区间的右连续长度,查询时判断p点处于左子树还是右子树,然后计算左子树的右连续长度+右子树的左连续长度的和。#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 阅读全文
posted @ 2012-08-24 17:19 找回失去的 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 这个题看了题解之后才会写的,每头牛最多有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 找回失去的 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 给出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 找回失去的 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 判断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 找回失去的 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 并查集确定昆虫的关系,题意有点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 找回失去的 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 进行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 找回失去的 阅读(663) 评论(0) 推荐(1) 编辑
摘要: 威佐夫博奕(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 找回失去的 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 并查集判断两个点是否联通,只需看他们的根节点是不是相同。/*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 找回失去的 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 求一个五元三次方程的解的个数,虽然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 找回失去的 阅读(188) 评论(0) 推荐(0) 编辑
摘要: /*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 找回失去的 阅读(159) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 29 下一页