摘要: 题意:判断一个多边形内是否存在核。分析:半平面交的模板题。用半平面交来求多边形的核可以用在线算法还实现,这个算法把问题分解成凸多边形与半平面相交(这个半平面的分界线就是题目中的多边形的每一条边)。求凸多边形与半平面的交集的做法是,先定义一个空的多边形,枚举多边形的点,若点在半平面内就加到这里定义的多边形的点集里,若与多边形的边相交就计算交点,再把交点也放到点集里。#include <cstdio>#define vector pointstruct point{ double x,y; point(double xx = 0,double yy = 0) { x... 阅读全文
posted @ 2013-05-07 00:39 Hogg 阅读(853) 评论(0) 推荐(0)
摘要: 题意:计算一个多边形的面积。分析:题目中的答案要么是整数要么就是小数部分为0.5的小数,计算出中间结果之后判断能否被2整除,能就输出除以2得到的答案,不能就在这个答案后再加.5。总的面积要用64位int来保存。#include <cstdio>#include <cmath>#define vector pointstruct point{ int x,y; point(int xx = 0,int yy = 0) { x = xx; y = yy; } point operator - (const point& s) { ... 阅读全文
posted @ 2013-05-05 20:15 Hogg 阅读(236) 评论(0) 推荐(0)
摘要: 题意:在一个多边形宫殿外造围墙,要求与宫殿与围墙各处至少保持l英尺,求围墙最小长度。分析:凸包模板题,N次WA,百度空间里找到一组数据让程序出现runtime error,发现是Graham_scan里的while循环的结束条件缺少判断栈里的元素个数是否大于1。#include <cstdio>#include <cmath>#include <algorithm>#define vector pointusing std::sort;using std::swap;const double PI = acos(-1.00);struct point{ in 阅读全文
posted @ 2013-05-05 16:29 Hogg 阅读(322) 评论(0) 推荐(0)
摘要: 题意:给出一个超市一天24小时每个小时需要的人手,再给出n个应聘者的上班时间,每个人每次上班连续8个小时,问最少要聘请多少人。分析:c[i]表示第i小时需要的人手,t[i]表示第i小时开工的人数,s[i]表示最终聘请的人里面在[0,i]之间开始工作的人的总数。转化为不等式组:s[i+1]-s[i]>=0(i+1小时开始上班的人数最少是0),s[i+1]-s[i]<=t[i+1](i+1小时开始上班的人数最多为t[i+1]),j+8=i && s[i]-s[j]>=c[i],i=(j+8)%24 && s[i]-s[j]>=c[i]-mid 阅读全文
posted @ 2013-05-02 01:27 Hogg 阅读(451) 评论(0) 推荐(0)
摘要: 题意:给出两种关于防御站位置的信息,一种是确切的信息,P A B X,表示a在b北面x距离的地方,另一种是V A B,表示只知道A在B的北面。问这些信息有没有矛盾。分析:差分约束。第一种记为A-B>=X && A-B<=X,第二种记为A-B>=0,用SPFA求得解,则没有矛盾,否则就有矛盾。#include <iostream>#include <stdio.h>#include <queue>using namespace std;const int N=1001;const int E=2*100000+1000;con 阅读全文
posted @ 2013-05-02 01:05 Hogg 阅读(760) 评论(0) 推荐(0)
摘要: 题意:有一长度为10000000的墙,上面按时间顺序张贴长度不同,宽度相同,位置不一定相同的广告,问最终还能有多少广告能露出来。分析:线段树。每贴一张海报就是把一个连续的区间的值全部更改,但这里的数据比较大,直接做可能时间空间复杂度都很高。因为最多只有10000张海报,而即使每张海报的两个端点都不相同,最多就有20000个有用的端点,所以可以采用映射把这些位置离散化,把这些点由小到大映射到另一个数组里,然后的线段树的操作就可以只在这个数组里进行了。#include<cstdio>#include<algorithm>using std::sort;struct line 阅读全文
posted @ 2013-05-02 00:53 Hogg 阅读(924) 评论(0) 推荐(0)
摘要: 题意:一个矩形箱子,左上角与右下角的坐标给出,里面有n块板把箱子里的空间分隔成许多个分区,给出这些板在上边的x坐标、下边的x坐标,以及一堆玩具的坐标,求这些分区里的玩具数目。分析:记玩具在点p0,某块板的上边点是p1,下边点是p2,p2p1(向量)×p2p0>0表示p0在p1p2的左面,<0表示在右面。接下来就是用二分法找出每个点所在的分区。叉积+二分查找#include<cstdio>#define vector pointstruct point{ int x,y; point(int xx,int yy) { x = xx; y = yy; ... 阅读全文
posted @ 2013-05-02 00:44 Hogg 阅读(806) 评论(0) 推荐(0)
摘要: 题意:一个正方形密室边长是10,内部有平行y轴方向的n堵墙,每堵墙都有两道门。要从(0,5)走到(10,5)最短距离是多少?分析:每道门的两个端点以及起点终点作为节点,要求起点到终点的最短路,建图时结合线段相交来判断两个顶点之间是否可达,就枚举这两个顶点之间的墙与这两个顶点相连而成的线段有没有相交,相交则不可达,不相交则为这线段的长度。Dijkstra + 线段相交判断,数据的组织要清晰。#include<cstdio>#include<cmath>#define vector pointstruct point{ double x,y; point(double xx 阅读全文
posted @ 2013-05-02 00:35 Hogg 阅读(335) 评论(0) 推荐(0)
摘要: 题意:国王有n个儿子,现在有n个美女,每个儿子都有若干个梦中情人,现在已经有一个方案使每个王子都能与自己的梦中情人之一结婚。现在要求的是,对于每个儿子能选择的配偶是谁(最终每个儿子都能结成婚)?分析:这个题的建图方法很特别。为了充分利用条件,即最后给出的那个完美匹配,将每个王子向他的梦中情人作一条有向边,完美匹配方案中,美女向匹配的王子作一条有向边。求出图中的强连通分量,与王子在同一个强连通分量且该王子喜欢的美女就是答案。正确性:王子集合{x1,x2,......,xn},美女集合{y1,y2,......,yn},假设在原完美匹配方案中每个匹配都是(xi,yi),显然yi是xi的一个选项。假 阅读全文
posted @ 2013-03-24 14:00 Hogg 阅读(359) 评论(0) 推荐(0)
摘要: 题意:给出一个r*c的图,每个点都是'o'或'*',最少要用多少个1×2的矩形才能把图中所有的'*'都覆盖掉。分析:受之前那题muddy field的影响,一直以为这题跟它是类似的,一路想着怎样把交点用边来表示,于是乎什么都想不出来。看了别人的题解才知道,这题每个点用一个顶点表示,若两个'*'相邻,则这两个点之间有条边(所以这条边表示的是一个1×2的矩形)。求出这个图的最大匹配,意思就是把相邻的'*'都尽量用最少的矩形来覆盖,匹配数就是矩形的数量。剩下那些不能匹配的点,每个都要用一个矩形来覆盖。 阅读全文
posted @ 2013-03-17 20:48 Hogg 阅读(497) 评论(0) 推荐(0)