自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 POJ 2074 Line of Sight <几何>

题目题目大意:就是求一条线上能够完全看见另一条线的最大连续范围为多大。需要注意的是,障碍线不一定在观光线和房屋线之间,而当障碍线与房屋线或者观光线有重合部分时,也不算遮挡。分析:求每个障碍线遮挡的范围,最后找到没有遮挡区域的中最长连续区域即可。具体看注释吧。代码:#include <iostream> #include <cmath> #include <algorithm> #include <i

2017-11-18 19:32:41 274

原创 POJ A Round Peg in a Ground Hole <凸包判断以及点与多边形的相对位置>

题目题目大意:就是给一些点的坐标(in order),判断它们是否构成凸包,如果是构成凸包,在判断给定圆是否在凸包内(圆心位于凸包内,且半径不大于圆心与凸包边的最小距离)。分析:判断圆心是否在多边形内,采用环顾角的方法,若求得的环顾角为2π2\pi或−2π-2\pi则说明在多边形内(具体见lrj的黑书第三章)。代码:#include <iostream> #include <cmath> #incl

2017-11-15 14:41:43 300

原创 POJ 3449 Geometric Shapes <几何(简单相交判断)>

题目分析:就是给一些多边形,多边形的边不会自交(简单多边形),求它们的相交情况(当某个多边形完全包含于某个多边形,不算相交)。代码:#include <cstdio> #include <iostream> #include <cmath> #include <vector> #include <string> #include <algorithm> using namespace std;con

2017-11-14 22:16:08 230

原创 POJ 2826 An Easy Problem?! <计算几何>

题目题目大意:墙上有两个等宽的木板(宽度为一个单位),问它们能够接到多少雨水。分析:就是求能够接到雨水的区域的截面面积,本来这道题没什么思考上的难度的,但是情况有很多种,一开始我就忽略掉了几种能够接到雨水的情况。。代码写了详细的注释,我感觉自己的代码写得还是挺清晰简洁的-.-代码:#include <iostream> #include <cmath> #include <algorithm> #i

2017-11-11 22:00:57 183

原创 POJ 3347 Kadj Squares <几何>

题目水题。。代码:#include <iostream> #include <algorithm> using namespace std;const int MAXN=55;struct Square{ int len; int l,r; void getbBoundary(Square *s,int index){ l=0; for(int

2017-11-10 19:52:40 249

原创 POJ 1696 Space Ant <计算几何>

题目水题。。代码:#include <iostream> #include <cmath> #include <algorithm> using namespace std;const int EPS=1e-8; const int MAXN=55;struct Point; typedef Point Vec;struct Point{ int id,order; double x

2017-11-09 23:48:39 172

原创 POJ 1410 Intersection <计算几何(线段相交判断)>

题目分析:求给定的线段是否与给定的矩形相交。仔细审题啊,好多人吃了英语不好的亏。。另外就是线段之间非规范相交的判断方法,与直线与线段是不同的。代码:#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std;struct Point; typedef Point Vec

2017-11-09 22:32:29 187

原创 POJ 2653 Pick-up sticks <计算几何>

题目水题。。但是不知道为什么从后往前扫会超时。。代码:#include <iostream> #include <cmath> #include <cstring> #include <cstdio> #include <algorithm> using namespace std;const double EPS=1e-8; const int MAXN=1e5+5;struct Point; t

2017-11-09 09:16:45 182

原创 POJ 1269 Intersecing Lines <计算几何>

题目水题。。。代码:#include <iostream> #include <iomanip> #include <algorithm> #include <cmath> #include <cstring> using namespace std;const double EPS=1e-8;struct Point; typedef Point Vec; int dblcmp(double);s

2017-11-09 08:23:27 143

原创 POJ 3304 Segments <计算几何(直线与线段相交判断)>

题目题目大意:平面上有一些线段,问是否存在一条直线,使所有线段在这条直线上的投影至少有一个公共点。分析:如果存在这样一条直线,那么选取投影的一个公共点,过此点做这条直线的垂线,这条垂线与所有线段都相交,所以题目就转为了求是否存在一条直线与所有线段均相交。而如果存在这样的直线,我们总可以通过平移和旋转将其变化为,至少通过所有线段的某两个端点,这样我们枚举任意两个端点形成的直线即可。代码:#includ

2017-11-08 09:15:11 203

原创 POJ Ty Storage <计算几何>

题目水题。。代码:#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <bitset> using namespace std;const int MAXN=1e3+5;struct Point; typedef struct Point V;struct Point{ i

2017-11-07 23:14:22 132

原创 POJ 2318 TOYS <计算几何>

题目分析:就是给一些点的坐标,判断它属于哪个区域。容易想到用以此点和右边界外一点为端点的线段与partitionpartition求相交情况,因为划分线段partitionpartition是有序的,所以我们可以用二分,求右方向最近相交的是哪一条线段,就可以知道属于哪个区域了。代码:#include <iostream> #include <cmath> #include <cstdio> #inc

2017-11-05 17:10:50 237

原创 UVa 248 Cutting Corners <计算几何+SPFA>

题目题目大意:给定起点坐标和终点坐标,以及一些矩形区域的三个点坐标,求起点到终点的最短路径长度(路径不能穿过矩形矩形区域)。分析:容易想到的是,将所有矩形的四个角以及起点和终点看做节点,若两个节点之间的连线不跨过任何矩形区域,则在此两节点间加一条边,边权即距离,如此建图后求最短路径就好了。需要注意的是,在矩形内部的节点应当删去,另外,因为我们判断是否跨过矩形是判断此线段与矩形的四条边是否规范相交,有

2017-11-03 16:58:57 326 1

原创 UVa 754 Treasure Hunt <计算几何(相交判断)>

题目题目大意:在100∗100100*100的方形区域里某地方有一宝藏,里面有一些障碍墙(没有多于两堵墙相交于同一点)将该区域分为若干小室,现在你只能从每个小室的墙壁的中间通过,问从外面到宝藏所在地最少通过几堵墙壁。分析:不要被所谓的只能通过中点所迷惑,实际上,因为那些墙将方形区域最外围的四面墙分为若干段,我们只需求每段的中点到宝藏的连线所跨过的墙的最少数就就好了。代码:include includ

2017-11-03 16:46:42 316

原创 UVa 393 The Doors <计算几何+最短路>

题目题目大意:在一个正方形的小室中,有一些障碍墙(0到18个),每个障碍墙有两扇门允许通过,你的目标是找到起点(x=0,y=5x=0,y=5)到终点(x=10,y=5x=10,y=5)的最短路径。分析:这是ljr《算法艺术与信息学竞赛》p.354的一道例题,书中给 出的解法是将这道题转化成图论中的最短路问题。将起点、终点以及所有门的两个边界点看做节点,两个点之间若可以直达,则在其所代表的的节点间加

2017-10-30 23:28:34 327

原创 POJ 1039 Pipe <计算几何>

题目分析:初次做计算几何的题,看了一下ljr的《算法艺术与信息学竞赛》,这本书第三章就是计算几何初步,可以用来入门吧。书上p.359有这道例题,看一下前面的基础知识,应该就知道如何做了。代码:#include <iostream> #include <iomanip> #include <algorithm> #include <cmath> using namespace std;const do

2017-10-29 11:44:57 229

原创 POJ Building a Space Station <最小生成树(Prim)>

题目链接题目大意:太空中有一些球形的舱室的cell,为了使宇航员们能够在舱室之间来去自如,你需要在必要的舱室之间搭建通道,通道的成本与长度有关,所以你必须选择最优的方案使搭建的通道长度总和最短。求这个最短总和长度。分析:其实就是简单的最小生成树题,将cell看成节点,节点之间的边权是它们之间的距离(球面之间的距离,即球心距减去两个球的半径,若两个球有重叠,则边权应看做0)。代码:#include <

2017-09-19 18:15:15 361

原创 POJ 2301 Beat the Spread <水题>

题目链接大水题。。代码:#include <iostream> #include <cmath> #include <algorithm> using namespace std;int main(){ int t; cin>>t; while(t--){ int a,b; cin>>a>>b; if(a<b||(a+b)%2)

2017-09-19 17:07:55 352

原创 POJ Expanding Rods <简单二分>

题目链接题目大意:两墙之前的细杆在加热之后会膨胀,若增加的温度为nn,膨胀系数为CC,那么原先长为LL的细杆膨胀后长度为L′=(1+n∗C)∗LL'=(1+n*C)*L,于是细杆会被挤压成弧形,求细杆前后中心点的高度差是多少。分析:可以对高度hh使用二分,由于题目中有一句 Input data guarantee that no rod expands by more than one half

2017-09-19 16:45:49 295

原创 POJ 3122 Pie <浮点数二分>

题目链接题目大意:生日就要到了,准备了些披萨在生日party上和朋友一起享用。现在有n快披萨,要分为f+1(包括自己)份,每份的尺寸要一样(就是体积一样),形状可以不一样,而且每个人的那一份必须来自同一块披萨,问每个人分到的最大尺寸是多少。分析:简单二分,水题。。这里有个小技巧可以减少计算量,计算的时候将π\pi约去,最后输出答案的时候再乘上就好了。代码:#include <iostream> #i

2017-09-17 22:13:48 209

原创 POJ 3258 River Hopscotch <二分>

题目链接题目大意:农场主John的牛喜欢跳房子,它们会从河的这端跳到河的那端,每次只能从相邻的一个石子跳到另一个石子,John想要它们跳的最小距离变得大一些,于是准备移除一些石子(最多只能移除m个),求移除一些石子后,河中的石子的最小间距最大能有多大。分析:简单二分,水题。。代码:#include <iostream> #include <algorithm> using namespace std

2017-09-17 20:43:15 160

原创 POJ 3273 Monthly Expense <二分>

题目链接题目大意:将一个区间内的数字分成m段,每段内的数字必须连续,对于每一种分法,我们求得每段的数字和,然后再得到一个所有和中的最大值sub_max,求在所有分法中sub_max的最小值(英语太渣。。这道题还是看了别人的题目大意才明白。。)。分析:此即最小化最大值,简单二分题。显然左边界是区间内数字的最大值(每一个数字即为一组),右边界是所有数字之和(只分一个组),所以我们用当前值去倒推分段数,如

2017-09-17 17:28:40 185

原创 POJ 2348 Euclid's Game <博弈>

题目链接分析: 比较有意思的一道题。 定义局面为一个二元数(x,y)(x,y),可以推出以下结论: 1)(x+y,y)(x+y,y)与(x,y)(x,y)必有一个为必胜态而另一个为必败态,因为(x+y,y)(x+y,y)可以到达(x,y)(x,y) 2)若x≥2yx\ge 2y则(x,y)(x,y)是必胜态,这是因为它可以到达1)中的两种情况之一(即后继状态存在必败态) 3)若x=yx=y

2017-09-16 21:28:21 145

原创 POJ 3048 John <Anti-SG(SJ定理)>

题目链接分析:Anti-SG游戏。直接套SJ定理就好了(参见贾志豪论文《组合游戏略述——浅谈SG游戏的若干拓展即变形》Chapter.2) 代码: c++#include <iostream> #include <algorithm> using namespace std;int t,n,a;int main(){ ios::sync_with_stdio(false); ci

2017-09-16 18:24:33 237

原创 POJ 2068 Nim <博弈dp>

题目链接令dp[id][remain]:轮到编号为id的人时还剩下remain颗石子的状态dp[id][remain]:轮到编号为id的人时还剩下remain颗石子的状态,那么dfs记忆化搜索就好了。代码:#include <iostream> #include <cstring> #include <algorithm> using namespace std;const int S=1<<13;

2017-07-30 20:55:51 331 1

原创 POJ 1704 Georgia and Bob <Nim变形>

题目链接又是一道水题啊,不过解法还是挺巧妙的。将所有棋子从后往前两两看做一对(最后若余下一个棋子,将其与棋盘左边界看做一对),那么每对棋子之间的空格便可以当作Nim游戏中的一堆石子了。Nim游戏中每堆石子只会减少不会增多,虽然每对棋子之间的空格可以增加,可若是前一个玩家移动的是某对棋子中的前一个,那么当前玩家总可以(也应该)移动后一个棋子相同步数,以保持上一轮的“局面”(作为必胜者显然要保持局面,而

2017-07-30 18:23:04 196

原创 POJ 2960 S-Nim <SG函数>

题目链接刚接触SG函数不久,再次被算法的巧妙震撼到,知道mex、SG函数这道题就是水题了。第一次在sublime text上编译代码,折腾了好久啊。。。不过最终结果还是令人满意的,现在我的sublime text 超好看啊!附图一张~ 代码:#include <iostream> #include <algorithm> #include <cstring> using namespace std

2017-07-30 17:08:44 302

原创 POJ 1067 取石子游戏 <威佐夫博弈>

题目链接这道题网上的题解给出的证明都不太完善也不是很清楚,故自己整理了一份详细题解,放在知乎了,链接。

2017-07-27 12:41:01 237

原创 POJ 2484 A Funny Game <简单博弈>

题目链接分析: 显然当n<3n<3时,AliceAlice必胜。当n≥3n\ge 3时,根据对称性,后手总可以根据先手取coin的方法决定自己取coin的方法,所以BobBob必胜,BobBob的具体策略如下:将coin编号为c1,c2,…,cn−1c_1,c_2,\dots,c_{n-1}。当nn为奇数时,令t=n−12t=\frac{n-1}{2}。若第一步先手取ckc_k,则后手第一步取c(

2017-07-27 12:31:50 193

原创 POJ 2115 C Looooops <扩展欧几里得算法>

题目:传送门题目大意:给出A,B,C,k,求循环for(varible=A;varible!=B;varible+=C)中的语句会执行多少次,注意数字是k-bit的,也就是说当数字大于2k2^k时,又从0开始计数。分析:设执行xx次,n=2kn=2^k,那么有x=(B−A+n)%nC%nx=\frac{(B-A+n)\%n}{C\%n},即模线性方程C∗x≡(B−A)%nC*x\equiv (B-A

2017-07-25 18:56:55 230

原创 POJ 1845 Sumdiv <数论(逆元 / 二分递归)>

题目:传送门题目大意:输入两个数A,BA,B求ABA^B的所有因子之和。分析: 这道题折腾了很久啊,值得写一写报告。 首先一个大于11的正整数XX有唯一分解: X=pe11∗pe22∗...∗penn,其中pn为素数。X=p_1^{e_1}*p_2^{e_2}*...*p_n^{e_n},其中p_n为素数。 那么XX的所有因子之和为: sum=(1+p11+p21+...+pe11)∗(1

2017-07-14 22:37:34 236

原创 POJ 1019 Number Sequence <递推关系>

题目:传送门题目大意:有一个无限数串是由S1,S2,S3,...,Sk,...S_1,S_2,S_3,...,S_k,...组成的,其中SkS_k代表1,2,3,...,k1,2,3,...,k,给出一个索引值i(1≤i≤2147483647)i(1 ≤ i ≤ 2147483647),求此数串中第ii个数字是什么。分析:首先我们求出SkS_k一共有几个数字,因为SkS_k比Sk−1S_{k-1}只

2017-07-13 13:55:36 227

原创 POJ 3252 Round Numbers <数位dp(记忆化所搜)/组合数学>

题目:传送门题目大意:输入两个数start和finish,求闭区间[start,finish]中Round Numbers(二进制表示中0的个数大于等于1的个数)的个数。分析:有两种做法。 一种是数位dp,limit的作用是,如果当前pos位之前的更高位已经达到最大值(默认受bit[]限制),那么当前位就会受bit[]限制,否则,则当前位为0,1都可以,这是为了保证搜索的数不会比x大。lead表示

2017-07-11 23:11:02 213

原创 POJ 1836 Alignment <LIS(单调栈优化)>

题目:传送门题目大意:有一些士兵站成一排,一开始他们是按编号站的,但是他们的首领不喜欢这样,于是首领让一些人出列,剩下的人中每个人都可以看向左边或右边的远方(即每个人的身高是队列左端或右端到他的所有士兵里唯一最高的)。输出这些士兵的身高,求最少出列几个人可以满足首领的要求。分析:解法很明确,分别求得队列从前往后和从后往前的LIS,然后再枚举身高最高分别出现的位置,以求得调整后队列的最大人数_max,

2017-07-10 16:12:29 377

原创 POJ 1276 Cash Machine <多重背包>

题目:传送门 分析:简单多重背包问题,第一次做此类型问题,看了dd大牛的《背包问题九讲》做的。不得不说这些大牛是真的厉害啊,高中时期就能写出如此清晰透彻的讲解。 代码:#include <iostream> #include <algorithm> #include <cstring> #include <string> using namespace std;const int MAXV=1e

2017-07-09 23:27:18 151

原创 POJ 1416 Shredding Company <DFS>

题目:传送门 题目大意:给出一个目标数字和一个用来切分的数字(长度均不大于6,没有前导0),求切分方案,使得切分的各段之和最接近目标数字但是又不大于目标数字。如果不能找到这样的切分,则输出“error”,如果有多个满足要求的方案,则输出“rejected”,否则则输出那个唯一的切分方案。 分析:这本是一道水题,简单DFS。但我还是想纪念一下自己做题水平的一个小小提高。刚开始刷题那会儿,因为是英文

2017-07-08 21:04:45 195

原创 POJ 3278 Catch That Cow <BFS>

题目:传送门 分析:超简单的bfs,稍微剪枝一下就好了,比如X-1要判断>=0,X+1要判断<=k,X*2要判断小于K*2。最后注意的就是N==K这种情况。 代码:#include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std;const int MAXN=2e5+1

2017-07-06 10:48:02 187

原创 POJ 3177 Redundant Paths <边双连通分量>

题目:传送门分析:将图中所有块(双连通分支)缩点过后,再找出所有叶子节点,在它们之间加边就好了。这道题是会有重边的,但是用邻接矩阵存储图G,自动就滤掉重边了。代码:#include <iostream> #include <algorithm> #include <cstring> using namespace std;const int MAXV=5010; int low[MAXV]; int

2017-07-05 18:10:38 216

原创 POJ 2942 Knights of The Round Table <双连通分量>

题目:传送门分析:这道题涉及的知识太多了。。要彻底吃透可能还需要几天。分享一篇题解。ps:是时候看看算法书了。代码:#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <stack> #include <vector> using namespace std;class POJ{

2017-07-05 16:46:57 189

原创 POJ 2195 Going Home <最小费用最大流>

POJ 2195 Going Home <最小费用最大流>

2017-07-03 21:54:19 207

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除