- 博客(28)
- 资源 (3)
- 收藏
- 关注
原创 POJ2236(并查集)
题目:http://poj.org/problem?id=2236 题意:给定n个点的坐标,然后选出其中的一些点出来,问在这些点中的指定的两点是否连通。#include #include #include using namespace std;const int N = 1005;struct Point{ int x,y;};P
2013-09-26 16:29:54 2452
原创 POJ2762(判断无向图的弱连通)
题目:http://poj.org/problem?id=2762 题意:给出n个山洞,对于每个山洞,如果任意选择两点s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No。 分析:实际上判断是否弱连通,所以首先强连通,然后缩点,对缩点形成的图最多只能有一个入度为0的点,如果有多个入度为0的点,则这两个连通分量肯定是不连通的。缩点后形成的图形是一棵树,入度为0的
2013-09-26 15:07:19 2464
原创 Codeforces344_C(数学思维)
题目:http://codeforces.com/contest/344/problem/C #include #include #include #include using namespace std;typedef long long LL;LL a,b;int main(){ cin>>a>>b; if(a>b)
2013-09-25 13:49:22 1399
原创 Wiki1017(乘积最大)
题目:http://wikioi.com/problem/1017/ #include #include #include using namespace std;namespace Multi{ const int N = 25; int n,k,ans; char str[N]; bool vis[N];
2013-09-25 09:08:05 1084
原创 HDU2586(最近公共祖先的Tarjan算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给一棵树,询问u和v之间的边权和。#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include using namespace std;
2013-09-24 11:27:14 3895
原创 POJ1330(最近公共祖先)
题目:http://poj.org/problem?id=1330 最近公共祖先的离线算法:#include #include #include #include using namespace std;const int N = 10005;int n;vector vec[N];int pre[N];bool vis[N];bool
2013-09-22 16:28:39 3202
原创 HDU3255(线段树+扫描线)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3255 题意:在一块地上种蔬菜,对于同一块地蔬菜价值高的一定是最后存活,求最后的蔬菜总值,也就是不同的矩形覆盖,有的矩形肯定在最上面。 #include #include #include #include using namespace std;const in
2013-09-20 21:19:28 2143
原创 POJ1151(线段树+扫描线求矩形面积并)
题目:http://poj.org/problem?id=1151 #include #include #include #include using namespace std;const int N = 10005;struct node{ int l,r; int cov; double len;};str
2013-09-20 20:08:03 2297
原创 POJ1177矩形面积并(矩形切割+括号匹配)
题目:http://poj.org/problem?id=1177 分析:(括号匹配)首先把矩形的上边界作为“左括号”边,下边界作为“右括号”边,然后上下排序。假定排完序之后是下面的状态:(())()(()()(())) 考虑“最外侧”的括号的数量。显然上面的那个串是(()) & () & (()()(()))有六个最外侧括号,那么边界数量就是6。排序的复杂度O(nlogn
2013-09-20 16:11:16 2258
原创 HDU3629(凸四边形的个数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3629 题意:平面上给n个点,问有多少个凸四边形? 分析:对于每个点,凹四边形的个数等于:C(n-1,3)-在这个点同一侧三点构成的三角形的个数。对于凸多边形的一个顶点,其他顶点必然在穿过这个顶点的直线的同侧。 算极角时,如果是负数(-pi ~ 0),就把它加上2 * pi,这样
2013-09-19 18:13:13 1897
原创 拓扑排序
拓扑排序就是把一个图的所有节点排序,使得每一条有向边(u,v)对应的u都排在v的前面。 拓扑排序的一个用途就是判断一个有向图是否有环。 性质1、拓扑排序在有向无环图中才能排出有效的序列,否则能判断该有向图有环。2、如果输入的有向图中的点,不存在入度为0的点,则该有向图存在回路3、如果存在的入度为0的点大于一个,则该有向图肯定不存在一个可以确定的拓扑序列但并不妨碍拓扑排序
2013-09-19 13:35:33 4814
原创 字符串Hash的原理与应用
下面的字符串Hash函数,最常用的是BKDRHash和ELFHash。unsigned int SDBMHash(char *str){ unsigned int hash = 0; while (*str) { hash = (*str++) + (hash << 6) + (hash << 16) - hash; }
2013-09-18 21:12:56 9200
原创 HDU4741(异面直线间的距离--空间解析几何)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4741 题意:给定两条异面直线,求它们最近的距离和对应的坐标。#include #include #include #include using namespace std;const double eps = 1e-8;//三维空间点struct Point
2013-09-17 16:51:14 2657 1
原创 NYOJ516(优化)
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=516 不能直接逐项快速幂计算。#include #include #include #include using namespace std;typedef long long LL;const int N = 10000005;const LL M
2013-09-13 18:24:37 993
原创 BZOJ1503(Splay)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 #include #include #include using namespace std;struct Node{ int val,size,cnt,lazy; Node *pre,*ch[2]; Node()
2013-09-10 13:50:51 1999
原创 SPOJ4487(Splay树)
题目:http://www.spoj.com/problems/GSS6/ 题意:给一个长度为n的数组,然后给出Q个4种操作,分别是:删除,插入,替换,查找指定区间连续最大和。#include #include #include using namespace std;const int N = 200005;const int INF = 1<<28;
2013-09-09 19:47:34 1797
原创 HDU1506(天然的笛卡尔树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题意:给定一个统计直方图,n个矩形条,每个矩形条宽1,高0-10^9,求最大矩形面积。 分析:天然的笛卡尔树,以输入的顺序为第一关键字,矩形条的高为第二关键字建立一颗笛卡尔树,并且是一个小堆。那么从树根开始后序遍历整颗树,在节点处结算一次保存最大值。建树O(n),遍历树也是O(n
2013-09-08 18:34:40 2343 1
原创 POJ1785(笛卡尔树的构造)
题目:http://poj.org/problem?id=1785 题意:构造笛卡尔树,这里是最大堆构造,然后以广义表的形式输出这棵笛卡尔树。#include #include #include #include using namespace std;const int N=500010;const int INF=~0U>>1;struct no
2013-09-08 16:16:56 3437
原创 SGU155(笛卡尔树的构造)
题目:http://acm.sgu.ru/problem.php?contest=0&problem=155 题意:给出每个点的两个值key和fix,且所有的key值和fix值都是不相同的,要求构造出笛卡尔树。输入每个点的两个权值,输出笛卡尔树每个结点(按照输入的顺序编号)的父亲结点和两个儿子的编号。 分析:首先,笛卡尔树对于key来说是二叉搜索树,对于fix来说是最小堆,所以
2013-09-07 20:12:28 3862
原创 SPOJ3273(Treap)
题目:http://www.spoj.com/problems/ORDERSET/ 题意:给定n个操作,I,D,K,C,分别代表插入,删除,找第K大元素,找小于x的元素个数。 分析:这里插入,删除和找第K大元素很简单,直接就是模版,但是这里找小于x的元素个数不好处理。因为Rank(Treap *t,int x)返回的是元素x在Treap中的排名,所以这里要求x在Treap一定是
2013-09-07 14:27:26 1971 1
原创 Treap原理和实现方法
Treap是一棵二叉搜索树,只是每个节点多了一个优先级fix,对于每个节点,该节点的优先级小于等于其所有孩子的优先级。 所以,这样看来就是:Treap中对于节点的关键字key来说,它是一棵二叉搜索树,而对于fix来说,它是一个最小堆,所以Treap可以看成是Tree+Heap,只是这里的Heap不一定是完全二叉树。Treap的平均时间复杂度为log(n). Treap跟笛卡尔树
2013-09-07 14:11:25 13881
原创 HDU4405(概率DP求期望)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:飞行棋,从0到n,置骰子,置到几就往前走几步,前进中会有捷径,比如2和5连到一起了,那你走到2时可以直接跳到5,如果5和8连到一起了,那你还可以继续跳到8,最后问跳到n时平均置几次骰子。也就是求期望。#include #include #include usin
2013-09-04 14:51:10 3119
原创 Fib数模n的循环节
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3977 题意:求斐波那契数列模p的循环节长度,注意p最大是2*10^9,但是它的素因子小于10^6。 分析过程:首先我们知道fib数列模p如果出现了连续的1,0就意味这着开始循环了,因为接下来的项就是1 1 2 3 5等等。那么很显然如果在第k位第一次出现了1,0,那么对于以后的1,0都
2013-09-03 18:12:41 11990 4
原创 HDU3208(区间指数和)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3208 题意:给两个数a和b,然后在闭区间[a,b]内的每一个数y都可以表示成x^k=y,要求x尽量最小,k尽量最大,然后求所有的k之和。 分析:对于这个题,我们首先要知道是基于以下的事实来计算的:对于一个数n,从1~n中假设有x个数是满足p^k形式的,这里的k最多到62,那么对于每一个
2013-09-03 14:13:44 2177
原创 SPOJ3931(N个点形成三角形的最大面积)
题目:http://www.spoj.com/problems/MTRIAREA/ 题意:就是给定一些点,点的个数最多为50000,从这n个点中选3个点形成的三角形面积最大是多少? 分析:对于这个问题,在网上题解中各种方法都有,但是大部分都是不可靠的,现在我知道的最快的正确方法是O(n^2)的。貌似还有O(nlog(n))的算法,我们可以这样考虑: 最大面积的三角形三个
2013-09-01 21:20:01 4593 3
原创 BZOJ2806(后缀自动机+DP)
题目:http://61.187.179.132/JudgeOnline/problem.php?id=2806 题意:给定一个由M个01串组成的字典。依据这个字典和一个阀值L,可以断言一个01串是否"熟悉",其定义是:把一个串划分成若干段,如果某个段的长度不小于L,且是字典中的某个串的连续子串,则这个段可识别;如果对于给出的串,存在一个划分,使得可识别的长度不小于总长度的90%,
2013-09-01 18:06:57 3604 3
原创 SPOJ7258(后缀自动机--第k大的子串)
题目:http://www.spoj.com/problems/SUBLEX/ 题意:给一个字符串,然后给Q个询问,每个询问输入一个数K,输出子串中字典序为K的字符串。#include #include #include #include using namespace std;const int N=250005;struct State{
2013-09-01 16:26:25 3256
原创 SPOJ8222(后缀自动机--出现次数最多的子串)
题目:http://www.spoj.com/problems/NSUBSTR/ 题意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值。求F(1)..F(Length(S)) #include #include #include #include using namespace std;const int N=250005;
2013-09-01 14:49:11 3680
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人