
POJ
文章平均质量分 68
16bit戦争
这个作者很懒,什么都没留下…
展开
-
POJ 2069 Super Star 爬山
题目大意空间最小球覆盖思路临滚粗前做点水题qwqCODE#define _CRT_SECURE_NO_WARNINGS#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define INF 1e15#define EPS 1e-7#define MAX 1原创 2015-04-15 07:23:39 · 1424 阅读 · 0 评论 -
POJ 1279 Art Gallery 多边形内核面积
题目大意:按顺序给出一个多边形的顶点,求这个多边形内核的面积。答案保留两位输出。思路:半平面交。加边的时候要讨论一下第一个点和最后一个点,否则会wa的很惨。CODE:#include #include #include #include #include #define MAX 1510#define EPS 1e-8#define DCMP(a) (原创 2014-10-20 13:53:17 · 855 阅读 · 0 评论 -
POJ 3525 Most Distant Point from the Sea 二分+半平面交
题目大意:给出一个岛的海岸线的轮廓,求这个岛上的所有点到海岸的最长距离是多少。思路:求多边形内切圆的问题要用二分+半平面交解决。二分半径的长度,然后将所有的边向左侧移动这个二分的长度,然后利用半平面交来判断是否能够满足条件。如果满足条件就提高下界,否则减小上界。我的移动的方法是这样的,首先每条边都要用点向量式来表示,就是边上任意一点和这条边的方向向量。这样做以后的操作会方便很多。然原创 2014-10-21 11:59:27 · 742 阅读 · 0 评论 -
POJ 1474 Video Surveillance 半平面交求多边形内核存在性
题目大意:一个楼有很多层,每一层是一个多多边形,问每一层是否有点能够看到这一层的全貌。思路:半平面交解多边形内核存在性,裸题。题中怎么没写数据范围?。。让我还re几次。。CODE:#include #include #include #include #include #define MAX 3010#define EPS 1e-8#define DCMP原创 2014-10-21 10:32:45 · 937 阅读 · 0 评论 -
POJ 3204 Ikki's Story I - Road Reconstruction 最大流关键边
题目大意:给出一个裸的最大流的图,求这个图中哪一条边的流量增大会使整个图的最大流增大。前言:POJ400题达成~~~思路:真心不知道这个题用预流推进怎么做,先给写预流推进的犇们点根蜡。。我用的是Dinic,写起来就比较轻松。模拟一下Dinic的过程,加入一条边的流量增大就会使S到T的最大流增大的充要条件是1.S->当前边的起始节点可以在残余网络中联通2.当前边的终止节点原创 2014-11-05 13:33:12 · 760 阅读 · 0 评论 -
POJ 3130 How I Mathematician Wonder What You Are! 半平面交求多边形内核是否存在
题目大意:定义一种多边形,叫做星形多边形。这种多边形就是有内核的多边形。给出一些多边形,问是否是星形多边形。思路:利用半平面交求解。PS:我的第一个多边形内核的代码不对。。一定要看这个,这个是我看了学长的代码之后才发现之前的代码的问题的,这个也不用微调,是准确值,总值千万不要去看前面的那篇!!!!由于内核中的所有点到图形上所有点的连线之间不能有边阻挡,所以为了满足任意一条边,需要满原创 2014-10-20 17:29:59 · 996 阅读 · 0 评论 -
POJ 3384 Feng Shui 半平面交
题目大意:一个人非常信“Feng Shui”,他要在房间里放两个圆形的地毯。这两个地毯之间可以重叠,但是不能折叠,也不能伸到房间的外面。求这两个地毯能够覆盖的最大范围,并输出这两个地毯的圆心。思路:我们当然希望这两个圆形的地毯离得尽量的远,这样的话两个圆之间的重叠区域就会越小,总的覆盖区域就越大。那我们就先把每一条边向内推进地毯的半径的距离,然后求一次半平面交,这个求出的半平面的交集就原创 2014-10-21 13:54:20 · 793 阅读 · 0 评论 -
POJ 2002 Squares 计算集合 点的hash
题目大意:给出平面上的n个点,问能组成多少个正方形。思路:一开始看时间3秒半,就想用set水过,然而失败了。没办法手写hash吧。观察坐标的范围,CODE:#include #include #include #include #define MAX 1010using namespace std;struct Point{ int x,y;原创 2014-11-04 14:29:29 · 753 阅读 · 0 评论 -
POJ 2348 Euclid's Game 组合游戏
题目大意:有两个人玩游戏,有两堆石子,每次一个人要从其中一堆石子中拿走一些石子,当出现有一对石子变成0的时候这个人就输了,另一个人就赢了。给出初始石子有多少,问谁能赢。思路:基础的组合游戏的判定问题,这个题没有给数据范围,非常的坑爹,据说需要long long。第一次做组合游戏的题目,想想还有些小激动呢。昨天听同学讲了讲,我来现学现卖一下:由于组合游戏的公平性,那么:如果一个状原创 2014-11-21 09:58:41 · 934 阅读 · 0 评论 -
POJ 2451 Uyuw's Concert 半平面交O(nlogn)
题目大意:在(0,0)到(10000,10000)的正方形区域内有一些有向直线,求它们左侧面积的交。思路:半平面交模板题。第一次写半平面交,犯了很多错误。CODE:#include #include #include #include #include #include #define MAX 40010#define EPS 1e-10#def原创 2014-10-18 17:29:04 · 1104 阅读 · 0 评论 -
POJ 2068 Nim 组合游戏
题目大意:有一堆石子,两伙人,围在一起坐,坐的顺序是ABABABAB。。。。每一个人最多能取a[i]个石子,取走最后一个石子的就输了。问谁能赢。思路:朴素的组合游戏判定问题,这个题给了数据范围,可以进行记忆化搜索。f[i][j]为还剩下i个石子,到了第j个人的时候的状态,然后记忆化一下。CODE:#include #include #include #incl原创 2014-11-21 10:45:12 · 985 阅读 · 0 评论 -
BZOJ 3212 Pku3468 A Simple Problem with Integers
题目大意:你拍一,我拍一,大家一起刷水题。CODE:#include #include #include #include #define MAX 100010#define LEFT (pos << 1)#define RIGHT (pos << 1|1)#define CNT (r - l + 1)using namespace std;struct S原创 2014-11-20 17:57:01 · 787 阅读 · 0 评论 -
POJ 1724 ROADS 最短路
题目大意:有两个权值的最短路问题,要求满足费用不超过一定限度的情况下的最短路。思路:正常的SPFA加一个小判断,就是当费用高于预期费用的时候不入队,顺便加一个pq吧。CODE:#include #include #include #include #include #define MAX 100005#define INF 0x3f3f3f3fusin原创 2014-11-04 17:50:36 · 658 阅读 · 0 评论 -
POJ 3335 Rotating Scoreboard 半平面交求多边形内核
题目大意:多边形求内核模板题思路:半平面交,我用的是O(nlogn)的半平面交,但是有一个问题,就是当多边形内核是一个点的时候,半平面交所得到的答案是空集合,但是输出应该是yes,实在没有什么好的解决方法,最后只能把所有直线向右移动,然后在求内核。但是这样做eps的不同取值有的时候能A有的时候不能A。有没有什么好的解决方法啊!!!求解答啊!!!CODE:#inclu原创 2014-10-20 10:55:13 · 1079 阅读 · 0 评论 -
POJ 1990 MooFest 树状数组
题目大意:Farmer John又来恶心我们了!这次他带来了一些牛,这些牛排成一列,他们的位置给出,每一个牛有一个音调。这些牛每两只牛之间都要互相交流,但是交流的时候会有一些花费,i,j两只牛的cost = max(vi,vj) * |posi - posj|。求所有牛之间互相交流的cost和。思路:一开始我还以为是最大或者最小花费,后来仔细读题发现想多了,就是单纯的统计,但是数据范围原创 2014-10-16 10:49:25 · 707 阅读 · 0 评论 -
POJ 3067 Japan 树状数组求逆序对
题目大意:有两排城市,这两排城市之间有一些路相互连接着,求有多少条路相互交叉。思路:把所有的路先按照x值从小到大排序,x值相同的按照y值从小到大排序,然后插入边的时候,先找有多少比自己y值小的,这些边的x值一定比自己大,也就是一个逆序对,然后统计起来。记得答案要用long long (__int64)CODE:#include #include #inclu原创 2014-10-16 08:50:40 · 975 阅读 · 0 评论 -
POJ 2352 Stars 树状数组
题目大意:给出y值升序的一些点,定义一个点的level值为它左下方的点的数量,求每一个level有多少个点。思路:由于y值是升序的,那么后面的点只要判断是否x值比前面的大就行了。那么就用树状数组维护。CODE:#include #include #include #include #define MAX 50000using namespace std;原创 2014-10-15 15:43:24 · 841 阅读 · 0 评论 -
POJ 3691 DNA repair AC自动机DP
题目大意:给出一些病毒串,和一个串,问至少修改多少个使得原串中不含病毒串。思路:AC自动机+DP,比较裸的题。先按照病毒串建立AC自动机(Trie图当然也可以),然后设出状态:f[i][j]表示匹配到原串第i个字符时,在AC自动机的j号节点时没有病毒串的最小花费。转移的时候有三种情况:1.转移出病毒串,这个时候直接continue。2.转移与原串相符,这个时候直接将数值转移过去。3.转原创 2014-11-28 10:44:36 · 769 阅读 · 0 评论 -
POJ 2945 Find the Clones Hash
题目大意:给出一些字符串,问其中n个一样的有多少。思路:看discuss里各种神奇的方法啊,什么map啊,什么Trie啊。这题不是一眼Hash么。。难道是我想错了?任意hash方法将所有字符串hash然后排序,之后统计一下相同的有多少就行了,500+MS水过。。PS:明天就是NOIP我这么水真的好(CODE:#include #include #incl原创 2014-11-07 10:52:01 · 709 阅读 · 0 评论 -
POJ 1981 Circle and Points 计算几何
题目大意给出平面上的一些点,求一个单位圆最多能够覆盖多少点。思路数据范围300,但是没有用,多组数据就是要卡O(n3)O(n^3),然而常数优化的比较好的话在POJ能过,但是BZ上还是过不了。我们需要寻找一种O(n2logn)O(n^2logn)的做法。 做法就是枚举每个点,做一个一这个点为圆心的单位圆。之后将所有在这个圆里的点弄出来,以这些点为圆心做单位圆,与开始的单位圆会产生一段圆弧,最后求哪原创 2015-04-08 15:30:32 · 1246 阅读 · 0 评论 -
POJ 3974 Palindrome Manacher
题目大意给出一个字符串,求出这个字符串的最长回文子串。思路前来学习著名的Manacher算法。 这是一个线性时间求出回文子串的算法。具体来说,对于我们弄出的一个回文串,它对于后面的串并不是,没有用的,因为它的左右两侧是相同的,那么自然可以用左边的信息去更新右边。 设p[i]p[i]为第ii个字符的回文半径,_max\_max为max{p[i]+i}max\{p[i] + i\},也就是最远可以更原创 2015-04-07 08:30:42 · 860 阅读 · 0 评论 -
POJ 2079 Triangle 旋转卡壳
题目大意给出平面上的一些点,求这些点能够组成的最大面积三角形。思路虽然数据范围有50W,但是POJ上的数据一向很弱,discuss中居然有人这样说: 手动二分发现极限数据凸包上有2596个点 RT 好水的数据好吧,留给我们的就剩下O(n2)O(n^2)的时间内解决这个题了。 首先先求出凸包,之后可以枚举这个大三角形的一条边,然后枚举另一个顶点。很显然这个过程是O(n3)O(n^3原创 2015-03-05 14:29:27 · 792 阅读 · 0 评论 -
POJ 1637 Sightseeing tour 混合图欧拉回路 最大流
题目大意:给出一张混合图,问是否存在欧拉回路。 思路:成题,直接看题解吧。http://www.cnblogs.com/Lyush/archive/2013/05/01/3052847.htmlCODE:#include #include #include #include #include #define MAX 510#define MAXE原创 2015-01-06 17:31:25 · 754 阅读 · 0 评论 -
POJ 2417 Discrete Logging Baby-Step-Gaint-Step
题目大意:给出A,B,C,求A^x=B(mod C)的最小x的值。思路:著名的BSGS算法。将C拆分成根号块,先对一个根号内的东西暴力插入一个Hash表中(别问我为什么不用map,因为这个题卡map。。。另我们要求的x=i * m + j,原式可以写成A^(i * m) * A^j = B(mod C)。这是ax=b(mod c)的形式我们只需要枚举i,然后看有没有符合要求的j就可原创 2015-02-26 14:46:20 · 796 阅读 · 0 评论 -
BZOJ 2258 pku2758 Checking the Text 文本校对 Splay+Hash+二分
题目大意:初始给出一个字符串,下面有一些操作,可以在一个地方加一个字符,询问从两个地方开始最长的匹配长度。思路:Splay维护Hash值,询问的时候二分一下就行了。它条件给的比较恶心,注意处理的时候按照他说的做就行了。CODE:#define _CRT_SECURE_NO_DEPRECATE#include #include #include #inclu原创 2015-01-21 14:46:40 · 1164 阅读 · 0 评论 -
POJ 2187 Beauty Contest 旋转卡壳
题目大意:求平面最远点对。思路:我会说正解是求出凸包之后暴力?然后我闲的蛋疼去写了旋转卡壳。。还在写极角序扫描法的不要再写了。。。赶紧换水平序吧。。。因为极角序需要解决两个特别不科学的问题。问题1:第一次排序的时候极角相同的情况,这个时候要保留最外面的。问题2:在最后得到的凸包上有三点共线的情况。有的时候并不会影响答案,但是有的时候就会,比如说旋转卡壳的时候。我的解决方法是原创 2015-01-21 18:07:15 · 826 阅读 · 0 评论 -
BZOJ 1706 usaco 2007 Nov relays 奶牛接力跑/POJ 3613 Cow Relays 倍增Floyd
题目大意:求恰好走k步从S到T的最短路。思路:设f[p][i][j]为从i到j恰好走2^p步的最短路,DP方程十分简单:f[p][i][j] = min(f[p][i][j],f[p - 1][i][k] + f[p - 1][k][j]);对总步数T进行二进制拆分,在T有1的位置上,假如这个位置为p,那么就用f[p][][]来更新答案g[][],最后得到的g[][]就是答案矩阵。原创 2014-12-30 09:03:16 · 982 阅读 · 0 评论 -
POJ 1830 开关问题 高斯消元
题目大意:给出灯的一些关系,求有多少种方法从始状态到终状态。思路:其实根据灯的这些关系就可以列出一系列方程,然后用高斯消元就可以求出自由元的数量,答案就是2^自由元的数量。CODE:#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #define MAX 50usi原创 2015-02-05 16:31:38 · 929 阅读 · 0 评论 -
POJ 1509 Glass Beads 后缀自动机
题目大意:给出一个环形的字符串,问从哪里开始是的这个字符串的字典序最小。思路:最小表示法和后缀自动机的裸题,不过我是为了学后缀自动机才写的这个题,就没有去学最小表示法。做法很简单,先建立一个后缀自动机,然后从根开始沿tranc指针从a->z走len次到达的点就是字典序最小的字符串的结尾点,求起始点只要减一下长度再+1即可。对于后缀自动机的理解:http://wyfcyx原创 2015-01-17 07:26:20 · 914 阅读 · 0 评论 -
BZOJ 3800 Saber VS Lancer/POJ 1755 Triathlon 半平面交
题目大意:有n个人进行铁人三项比赛,对于这三种运动,每个人都有一个固定的速度,但是每种运动的长度是多少并不知道。现在问裁判可不可以通过调整这三项运动的长度来使某一个人赢得比赛。思路:考虑现在我们想让一个人赢的时候,这个人的三个速度分别为v1,v2,v3,想让所有人都输给他,设某一个人的三个速度是v1',v2',v3'。设三项的比赛的长度为l1,l2,l3。那么不难得到如下方程:l1 /原创 2014-12-11 20:19:14 · 1144 阅读 · 0 评论 -
POJ 3261 USACO 2006 December Gold Milk Patterns
题目大意:给出一个字符串,求出出现过k次以上的最长的子串(可重叠).思路:现弄出来sa数组和height数组,之后就是判断每个长度为k的height数组的区间中最小的数字的最大值了.为什么好多人都二分了?这只要单调队列扫一次就行了啊..CODE:#include #include #include #include #include #define M原创 2014-12-08 13:13:53 · 1003 阅读 · 0 评论 -
POJ 2774 Long Long Message 后缀数组
题目大意:给出两个字符串,求出这两个字符串的最长公共序列。思路:把两个字符串合成一个,然后跑一次后缀数组,求出rank数组和height数组,之后验证是否rank临近的两个后缀在不同的串里,如果是的话就更新答案。CODE:#include #include #include #include #define MAX 2000100using namespa原创 2014-12-05 15:15:51 · 725 阅读 · 0 评论 -
POJ 1737 Connected Graph 高进度+递推
题目大意:n个点组成的联通图有多少种。思路:动态规划的思想。设f[i]为i个点的连通图有多少种。显然f[1] = 1。从2个点开始,我们用所有的方案 - 不连通的图的方案。所有的方案很简单,2^(n * (n - 1))。然后我们枚举哪些点与1号节点联通,剩下的点不与1号节点联通,那么图就是不连通的。设有k个节点与1号节点联通,那么这个方案数是f[k + 1]。剩下的点原创 2015-01-28 20:09:30 · 932 阅读 · 0 评论 -
POJ 2175 Evacuation Plan 费用流消圈
题目大意:给出一个费用流的模型和已经流过的一些边,问是否存在比这个解更优的解。思路:直接用原图做一次费用流求最优解会T掉。先介绍费用流消圈定理:如果当前费用流的残量网络中存在负圈,那么当前流不是最优的解。其实很好理解,结合原图和流过流量之后的反边,若出现了负圈,那么就可以沿着这个负圈增广,而且费用更小。不过为了解决这个题我们并不需要建立完整的网络流,只需要建立残量网络之后SPF原创 2015-01-28 18:54:28 · 969 阅读 · 0 评论 -
POJ 2699 The Maximum Number of Strong Kings 竞赛图+最大流
题目大意:有n个人之间互相竞赛,现在给出每个人赢了多少局。若定义一个人是最高分或者这个人赢了所有比他分高的人,那么这个人就算赢了。问最多可能有多少人赢。思路:最大流模型的另一种应用。二分图,左边是所有选手,右边是所有比赛。S->所有选手 f:该选手赢了多少局所有比赛->T f:1由于最多只有十个人,所以枚举答案就行了。枚举最多有多少人赢了,如果一个分比较低的人赢了,那么分比原创 2015-01-07 08:20:11 · 977 阅读 · 0 评论 -
POJ 2631 Roads in the North 树的直径
题目大意:裸的树的直径。思路:随便用一个点跑BFS,求出这个点到所有点的距离,取距离最长的那个点,再用那个点跑BFS,最远的距离就是这棵树的直径。CODE:#include #include #include #include #include #define MAX 20010using namespace std;int x,y,z;int原创 2014-10-04 13:27:00 · 1506 阅读 · 0 评论 -
POJ 3321 Apple Tree DFS序+fenwick
题目大意:有一颗长满苹果的苹果树,有两个操作。1.询问以一个点为根的子树中有多少个苹果。2.看看一个点有没有苹果,如果没有苹果,那么那里就马上长出一个苹果(= =!);否则就把那个苹果摘下来。思路:进行一次深搜,将每个节点最开始出现的时间和最后出现的时间记在一个数组里,那么这两点之间的点就是它以及它的子树的二倍,然后就用树状数组来维护区间和就行了。CODE:原创 2014-10-16 10:00:02 · 682 阅读 · 0 评论 -
POJ 2567 Code the Tree & POJ 2568 Decode the Tree Prufer序列
题目大意:2567是给出一棵树,让你求出它的Prufer序列。2568时给出一个Prufer序列,求出这个树。思路:首先要知道Prufer序列。对于任意一个无根树,每次去掉一个编号最小的叶子节点,并保存这个节点所连接的节点所得到的序列就是这棵树的Prufer序列。这个序列有十分优雅的性质,它能与无根树一一对应。因此,两个标号一样的无根树得到的Prufer序列也一定是一样的。此外,设一个原创 2014-10-31 08:30:22 · 1293 阅读 · 0 评论 -
POJ 1734 Sightseeing trip Floyd求最小环
题目大意:给一张无向图,求这个图中的最小环并输出路径。思路:在每次正常的Floyd更新最短路之前,先判断是否有最小环,然后再进行正常的floyd更新。如果在k更新最短路之前i和j就已经有点将他们更新,那么i->j就有一个环。然后就可以递归找出路径。CODE:#include #include #include #include #define MAX 1原创 2014-10-09 20:02:31 · 809 阅读 · 0 评论 -
POJ 3241 Object Clustering 曼哈顿距离最小生成树
题目大意:求出曼哈顿距离最小生成树上的第k大边权。思路:首先,你要了解:http://blog.youkuaiyun.com/acm_cxlove/article/details/8890003也就是说,我们以每一个点为中心,把平面分成8个部分,每一个部分我们只需要离这个点最近的点。然后加上建一条边连接这个边和最近的点。然后就是MST。听说这个算法是莫队算法的基础,我现在就去学。原创 2014-11-12 16:12:48 · 853 阅读 · 0 评论