摘要:
http://poj.org/problem?id=2406题意:字符串A分解为数个相同的字符串B,求B的最多的个数,如ababab,可由3个ab组成,abcabab由1个abcabab组成(即本身),aaaa由4个a组成。解题:本题并不要用到KMP的整个算法,而只是用到了KMP算法中的:next[i]的值。所于要对next[i]比较理解。以str="abcaababc"为例:i012345678串abcaababcnext[i] -100011212最后结果为ans=next[n]/(n-next[n])+1;n为字符串长度,如上面的"abcaababc&quo 阅读全文
摘要:
要求将点集顺时针连接,且线不交叉,输出最多能连的点数,并输出路径。由于最近一直在看凸包问题,所以读完题,首先想到Graham法,不过Graham法用得比较麻烦。后来上网看了下解题报告,原来卷包裹法才是正解,于是用卷包裹法又解了一遍。这里把这两种方法都写一写吧。Graham法:递归求每层凸包,每层凸包的最后一点A,要去找下一层凸包与A向左转最小角的点做为下一点B,(因为题目要求逆时针,并不交叉)即下一个凸包起点。想想其实和卷包裹法思想差不多;卷包裹法:以最左下方的点为起点A,找其余与A向左转最小角的点做为下一点B,然后用同样的方法再去找B的下一个点,直到找完所有点。是不是要比上面的Graham法 阅读全文
摘要:
poj1113的教训!!!!printf一个浮点数时,不论这个浮点数是double还是float,占位符都要用%f而不是%lf,因为严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。 阅读全文
摘要:
http://poj.org/problem?id=1113题意:给定n个点,建一个围墙,围住所有点,并且墙与所有点的距离不得小于L,求这个墙最小的长度。解题:凸包边长+L半径圆周长copy一个证明:http://blog.sina.com.cn/s/blog_687916bf0100jq9g.html证明如下:假如顺时针给出四个点A、B、C、D。组成了凸四边形ABCD。我们不妨过A点作AE垂直于AB,同时过A点再作AF垂直于AD,过B点作BG、BH分别垂直于AB、BC。连结EG,垂线段的长度为L,过A点以AE为半径作一段弧连到AF,同理,使GH成为一段弧。此时EG=AB(边),AB段城墙的最 阅读全文
摘要:
http://poj.org/problem?id=2187题意:给定平面的一些点,求最远两点距离的平方值。解题:用Graham法求凸包,注意凸包边上如果存在点要保留,因为存在所有的点组成的是一条直线的情况。再用枚举法求凸包的直径,当然凸包直径也可用旋转卡壳求解,可惜这种方法我还不是很清楚。#include<stdio.h>#include<stdlib.h>#include <iostream>#include <cmath>#include <algorithm>using namespace std;#define maxn 5 阅读全文
摘要:
http://hi.baidu.com/acmer%CE%CF%C5%A3/blog/item/63cc29a3670f77a1caefd0e1.html凸包点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。顶点个数n(1)排序:在点集Q中找最左下方的点p0,就是x坐标和y坐标都最小的点,其余的点计算它们的极坐标幅角,以幅角的非降序顺序来排序,如果有幅角相同的,最接近p0的优先。(这是《ACM程序设计培训教程》上的排序方法,由于看不懂什么是幅角,于是上网找了另一种排序方 阅读全文
摘要:
qsort和sort的区别先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的。First qsort基本快速排序的方法,每次把数组分成两分和中间的一个划分值,而对于有多个重复值的数组来说,基本排序的效率较低。集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决这个问题。所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分。函数对buf 指向的数据按升序排序。使用方法:void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )int 阅读全文
摘要:
题目讲的是主人出去遛狗。图中有n个景点和m个好玩的地方,主人要沿直线走完n个景点,主人和狗的起点、终点一样,途中狗会离开主人去去一个好玩的地方(每次最多只能一个)并在下一个景点与主人会合,狗的速度是主人的两倍。问最多狗能去几个地方(景点数+能去的最多好玩地方),并且输出狗的行走路线;构图:把主人走的路段作为X部,景点作为Y部。如果狗在某个路段能到达某个景点就将这两个连线。套用模板求得最大匹配即为狗能到达的最多好玩地方,再加上景点数即可;Source CodeProblem: 1034User: 541780774Memory: 416KTime: 63MSLanguage: G++Result 阅读全文
摘要:
http://poj.org/problem?id=2594太经典了,最小路径覆盖之变形!如果题目中有暗示此图无环且路径是单向的话,必然是最小路径覆盖无疑!这个题的题目意思和那个伞兵题差不多,但是伞兵走过的路径是可以交叉的,这样我们先做一个传递闭包,然后再连边做最小路径覆盖即可。Source CodeProblem: 2594User: 541780774Memory: 652KTime: 1110MSLanguage: G++Result: AcceptedSource Code#include<stdio.h> #include<stdlib.h> #include 阅读全文
摘要:
最短带权路径问题的解法::Dijkstra & Floyd 在一个网络中,如果两个结点之间有直接的因果关系,则这两个结点直接连通,在连接两个结点的弧上标上它的代价或权,值得注意的是这样的代价不一定是对称的,即A到B的代价不一定等于B到A的代价,实际问题中以行船为例,有顺水和逆水的区别。在图G中,给出两个结点求这样一条最短的路径,使经过这条路径上的代价之和最小,这就是最短路径问题。 如果所有弧上的权都相等,则问题退化为求两个结点间的一条路径使经过的中间结点最少。比如在一个城市的交通网络中,乘客关心的可能只是旅途中中转的次数,只希望转更少次数的车。对于这样的问题,运用BFS对图进行层次遍历 阅读全文