自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

(╯°口°)╯(┴—┴

┬—┬ ノ( ' - 'ノ)

  • 博客(85)
  • 收藏
  • 关注

原创 BZOJ 1295 SCOI 2009 最长距离 SPFA

题目大意:给出一张地图,上面有些点有障碍物,现在有T个机会能够移除障碍物,问地图上最长的欧几里得距离是多长。思路:在原图的基础上建图,f[i]表示的是起点到这里最少需要移除多少个障碍物,然后暴力枚举起点,更新答案即可。CODE:#include #include #include #include #include #include #include

2014-10-31 16:27:23 924

原创 POJ 3006 Dirichlet's Theorem on Arithmetic Progressions 快筛质数

题目大意:给出一个等差数列,问这个等差数列的第n个素数是什么。思路:这题主要考如何筛素数,线性筛。详见代码。CODE:#include #include #include #include #define MAX 1000010using namespace std;int prime[MAX],primes;bool notp[MAX];int a

2014-10-31 11:00:26 687

原创 POJ 2567 Code the Tree & POJ 2568 Decode the Tree Prufer序列

题目大意:2567是给出一棵树,让你求出它的Prufer序列。2568时给出一个Prufer序列,求出这个树。思路:首先要知道Prufer序列。对于任意一个无根树,每次去掉一个编号最小的叶子节点,并保存这个节点所连接的节点所得到的序列就是这棵树的Prufer序列。这个序列有十分优雅的性质,它能与无根树一一对应。因此,两个标号一样的无根树得到的Prufer序列也一定是一样的。此外,设一个

2014-10-31 08:30:22 1248

原创 BZOJ 1050 HAOI 2006 旅行comf SPFA动态加点

题目大意:给出S和T,求从S到T的最长边/最短边的最小值(分数形式输出)。思路:和NOI2014的魔法森林很像啊,比较裸地动态加边,按照边的权值从大到小排序,然后一条一条的加进去,f[i]维护的是从S到i的路径上的最长边权的最小值,这样任意一个时刻,f[i]是S到i的最长边的最小值,当前加进去的边是所有边的最小值,计算答案更新答案就可以了。注意输出的判断。CODE:

2014-10-30 16:32:36 1020

原创 BZOJ 3083 遥远的国度 树链剖分

题目大意:给出一颗无根树,有链的修改操作,还有子树的查询。除此之外,还有选定这棵树的一个点为根。思路:子树操作,链上修改,带size域的树链剖分就可以搞定。换根肯定不能真的换,出题人要是闲的没事所有操作都在换根就惨。我们可以画一张图模拟下换根。先按照读入的顺序建一颗有根树,然后观察当前的根在要询问的点的位置。如果当前的根在要询问的点的儿子中,那么那个点为根的时候,当前点的子树就是除了当

2014-10-30 15:26:15 2323

原创 POJ 1185 NOI 2001 炮兵阵地 状压DP

题目大意:给出一个地图,有两种点,P点可以站人,H点不能站人。每放一个人就会对他上下左右各两个格子产生影响,产生影响的格子不能放人。问最多能放多少个人。思路:数据范围指引解题的方向。题中给出M最后是如果mCODE:#include #include #include #include using namespace std;int m,n;ch

2014-10-30 13:18:29 923

原创 BZOJ 1085 SCOI 2005 骑士精神 IDA*

题目大意:有一张5*5的棋盘,上面有12和黑棋还有12个白棋。问最少多步可以到达目标状态。思路:搜索+剪枝。至于剪枝我就用ID+A*的组合了,因为都不难想,估价函数就是当前图和目标图有多少个方块不一样。如果当前步数+估价大于当前迭代加深的层数就退出。CODE:#include #include #include #include using namespac

2014-10-29 15:54:19 903

原创 BZOJ 1032 JSOI 2007 祖码Zuma 区间DP

题目大意:按照祖玛的玩法(随意选颜色),给出一段区间,问最少用多少个球能够把所有颜色块都消除。思路:把输入数据按照连续的块处理,保存成颜色和数量,然后用这个来DP。我们知道,一个单独的块需要两个相同的颜色可以消去,对于这样的块f[i][i] = 2,其余的>=2个的块只需要一个,这样的块f[i][i] = 1。转移就比较简单了,按照区间DP的一般思想,最外层循环的是区间长度,中间循环的

2014-10-29 10:50:42 3200

原创 POJ 2528 Mayor's posters 离散化+线段树

题目大意:给出一些海报和贴在墙上的区间,问这些海报按照顺序贴完之后,最后能后看到多少种海报。思路:区间的范围太大,然而最多只会有10000张海报,所以要离散化。之后用线段树随便搞搞就能过。关键是离散化的方法,这个题我时隔半年才A掉,之前一直就TTT,我还以为是线段树写挂了。当我认为我自己的水平这种水线段树已经基本写不挂的时候又写了这个题,居然还是T。后来我对比别人的代码,才发现是我

2014-10-29 10:37:23 875

原创 BZOJ 1043 HAOI 2008 下落的圆盘 计算几何

题目大意:给出一些圆盘,他们按照时间顺序相互覆盖,问最后的到的图形的可见圆周的周长是多少。前言:円盘反对!让我们一起团结起来!赶走円盘!思路:对于每一个圆盘,只要扫描在它后面出现的圆与它交的部分的并,总周长-相交的并就是剩下能看见的圆周的长度,然后累加到答案中。对于两个圆的交,我们可以用一个有序数对(x,y)以弧度为单位来表示,这样所有的xy都在0~2π区间之内。求角度就利用余

2014-10-29 07:55:08 1194

原创 POJ 2506 Tiling 高精度

题目大意:给出一个2*n的条形区域,问用2*1和2*2的方格一共有多少种摆放的方法。思路:f[i] = f[i - 1] + f[i - 2] * 2写一个高精度加法就可以了。CODE:#include #include #include #include #include #define MAX 260#define BASE 1000using

2014-10-29 07:50:56 757

原创 POJ 1306 Combinations 高精度乘法

题目大意:给出mn,让你求C(m,n)。思路:公式都给你了,就100,暴力就可以关键还是高精度。如果按照算法“它让你怎么做你就怎么做”,那么很显然你需要写一个高精度除法。然而可以证明,这个除法是不会产生余数的。所以我们可以数论分析,然后避免高精度除法。方法就是暴力求每个数的质因数,然后把被除数和除数相同的质因数消去,最后除数肯定会被消没。这样只要做高精度乘法就可以了。C

2014-10-28 18:37:45 904

原创 BZOJ 1089 SCOI 2003 严格n元树 递推+高精度

题目大意:严格n元树的定义是所有的点都有n个儿子节点或者没有儿子节点。问m层的严格n元树的个数是多少。思路:递推式十分简单,这题主要是再考高精度。递推式S[i] = S[i - 1] ^P + 1,ans = S[i] - S[i - 1]。高精度的话这个题用的还是挺多的,有+-*^还有输出,写的很爽CODE:#include #include #inc

2014-10-28 17:43:33 904

原创 POJ 1265 Area Pick公式

题目大意:给出一个多边形的轮廓(以边的向量形式给出),求:1.有多少个整点在这个图形里面,2.有多少个点在图形内部,3.图形的面积是多少。思路:首先明确Pick公式:公式意义并不是让我们求出这个多边形的面积是多大,一是因为面积没必要用Pick公式求,二是没法求出多边形中间有多少整点。但是面积可以用叉积来求,多边形边上的整点可以用gcd来求,这样经过稍微的变形,就可以求解多边形中间有

2014-10-27 17:28:13 751

原创 POJ 1375 Intervals 解析几何 求圆的切线

题目大意:给出一个点,再给出都处于这个点之下的一些圆,求这个点光源照到这些圆上之后所得到的阴影的并集。思路:求出每一个圆关于那个点的切线,每一个圆可以处理出来两个切线,这两个切线在x轴上交点的中间部分就是要求的阴影。最后将所有的阴影部分取并输出。关于求切线,我是利用方向向量解方程做的。应该有更简洁的方法吧。。CODE:#include #include #i

2014-10-27 15:58:22 1011

原创 BZOJ 2152 聪聪可可 树的点分治

题目大意:有两个小孩在玩游戏,他们每一个人在树中取一个点,如果这两个点之间的路径长度之和是3的倍数,那么聪聪就赢了,否则他就输了。给出这棵树,求聪聪赢的概率,答案用分数表示。思路:数据范围2w,肯定不能枚举点然后LCA。所以就只能点分治了。这还是一道比较常规的点分治问题,但是有一个地方需要注意,在统计两点之间的距离的时候我一开始的想法是直接n^2的枚举,然后记录。但是那样时间复杂度就会

2014-10-27 12:07:45 1013

原创 BZOJ 1927 SDOI 2010 星际竞速 费用流

题目大意:宇宙空间中进行了一次竞速大赛。有两种飞行方式,第一种是通过正常的道路,但是只能从标号小的飞到标号大的地方;第二种是直接过去,但是需要花费固定的时间。问正好遍历一次所有的点最少需要的多少时间。思路:费用流。把每个点拆点,S到每个点的起点连费用0的边,向每个终点连费用为固定费用的边,图中原有的边从一个的起点连到另一个点的终点。然后每个点的终点向T连边。跑最小费用最大流就是最后的答

2014-10-27 10:45:12 1257

原创 BZOJ 3589 动态树 树链剖分+容斥定理

题目大意:给出一棵树,每一个节点有一个权值,一开始所有节点的权值都是0。有两种操作,0 x y代表以x为根节点的子树上所有点的权值增加y。1 k a1 b1 a2 b2 ……ak bk代表询问。一共有k条边( k 思路:子树修改,区间查询,很明显用树链剖分解决,树链剖分维护一个size域,那么x的子树的范围就是pos[x]到pos[x] + size[x] - 1这一段上,可以用线段树

2014-10-25 08:08:03 1135

原创 BZOJ 1038 ZJOI 2008 瞭望塔 半平面交

题目大意:给出一个村庄的轮廓,在这个村庄里可以在任意的地方建一个瞭望塔,这个塔需要足够高,使得能够看得村庄的全貌。求这个瞭望塔的最小高度。思路:对于村庄中的每一条边,瞭望塔为了看见它,必须要在这个直线左侧的半平面区域。这样的话为了满足所有的边的需求,做一次半平面交,瞭望塔的最高点必须在所有边的半平面交的区域内。如下图样例。所有边的半平面交区域就是上面的图形。设上面半平面的函

2014-10-24 15:51:46 962

原创 BZOJ 2186 SDOI 2008 沙拉公主的困惑 数论

题目大意:求出1~N!中与M!互质的数的个数,保证N>M。前言:最讨厌数学了。。。思路:因为保证了n>m,所以n!一定是m!的倍数。如果找到了一个x使得gcd(x,m!)==1,那么gcd(x + m!,m!) == 1一定成立,gcd(x + k * m!,m!) == 1(k >= 1)也一定成立。x的个数就是φ(m!),那么总的个数就是φ(m!) * n! / m!。之后各种

2014-10-24 14:05:56 962

原创 BZOJ 2809 APIO 2012 dispatching 平衡树启发式合并

题目大意:给出一棵树,每一个节点有两个值,分别是这个忍者的薪水和忍者的领导力。客户的满意程度是这个点的领导力乘能够取得人数,前提是取的人的薪水总和不超过总的钱数。思路:只能在子树中操作,贪心的想,我们只要这个子树中cost最小的那些点就可以了。所以就深搜一次,每到一个节点上,把自己和所有子节点的平衡树启发式和并,然后保留不超过总钱数的人数,统计。数据范围比较大,能开long long的

2014-10-24 10:38:13 1246

原创 POJ 2635 The Embarrassed Cryptographer 线性筛+高精度取模

题目大意:给两个数,第一个数的范文是10^100,第二个数10^6,第一个数是两个质数的乘积,问有没有不超过第二个数的数是第一个树的因子。思路:10^6中只有7w+个素数,只要挨个判定能不能整除即可。然后这个题素数必须线性,不然就T。还有高精度一开始我压了4位,之后就wa,调了很长时间发现判断整除的过程中爆int了,换成long long就是T,最后十分生气,直接压到了7位,果断A了,

2014-10-23 11:55:59 699

原创 POJ 1942 Paths on a Grid 组合数学

题目大意:有一个m*n的方格纸,从左下角到右上角有多少走法。思路:简化问题,每次只有两种操作,向上走和向右走,可以抽象的看成01序列。m和n固定,那么01的个数确定,只有顺序会决定有多少种走法。只考虑0或者1另一种就确定了。那么就是m+n中选出m有多少种选法。答案就是C(m + n,m)或者C(m + n,n)。然后就可以计算组合数了。一般组合数的计算可以通过递推:C(m,n) =

2014-10-23 09:08:16 598

原创 POJ 3256 Cow Picnic 搜索

题目大意:有一些奶牛在一些牧场里,这些牧场有些单向边,牧场中的牛按照单向边行走,问有哪些牧场所有牛都能到达。思路:图的连通性本来应该是tarjan或者并查集什么的,但是这个题数据范围是在是太弱了,所以就搜索就行了。CODE:#include #include #include #include #define MAX 10010using namespac

2014-10-22 16:05:52 663

原创 BZOJ 1016 JSOI 2008 最小生成树计数 Kruskal+搜索

题目大意:给出一些边,求出一共能形成多少个最小生成树。思路:最小生成树有很多定理啊,我也不是很明白,这里只简单讲讲做法,关于定各种定理请看这里:http://blog.csdn.net/wyfcyx_forever/article/details/40182739我们先做一次最小生成树,然后记录每一种长度的边有多少在最小生成树中,然后从小到大搜索,看每一种边权有多少种放法,然后所有

2014-10-22 15:26:58 894

原创 POJ 3592 Instantaneous Transference Tarjan+SPFA

题目大意:给出一张地图,有数字的点代表上面有数字个矿物,*代表这个点可以传送到另一个点上,#代表不能走。从一个点只能到这个点的下方和右方。现在从(0,0)开始,问最多可以收集多少矿物。思路:这个题肯定是建图,然后最长路,关键是有了传送,就有可能形成正权环,然后在SPFA的过程中就会死循环。一个环上的所有权值只能得到一次,所以就用一次Tarjan求出所有的环,把权值累计一下,变成一个点,

2014-10-22 12:07:05 958

原创 POJ 3384 Feng Shui 半平面交

题目大意:一个人非常信“Feng Shui”,他要在房间里放两个圆形的地毯。这两个地毯之间可以重叠,但是不能折叠,也不能伸到房间的外面。求这两个地毯能够覆盖的最大范围,并输出这两个地毯的圆心。思路:我们当然希望这两个圆形的地毯离得尽量的远,这样的话两个圆之间的重叠区域就会越小,总的覆盖区域就越大。那我们就先把每一条边向内推进地毯的半径的距离,然后求一次半平面交,这个求出的半平面的交集就

2014-10-21 13:54:20 769

原创 POJ 3525 Most Distant Point from the Sea 二分+半平面交

题目大意:给出一个岛的海岸线的轮廓,求这个岛上的所有点到海岸的最长距离是多少。思路:求多边形内切圆的问题要用二分+半平面交解决。二分半径的长度,然后将所有的边向左侧移动这个二分的长度,然后利用半平面交来判断是否能够满足条件。如果满足条件就提高下界,否则减小上界。我的移动的方法是这样的,首先每条边都要用点向量式来表示,就是边上任意一点和这条边的方向向量。这样做以后的操作会方便很多。然

2014-10-21 11:59:27 720

原创 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 913

原创 BZOJ 3123 SDOI 2013 森林 可持久化线段树+启发式合并

题目大意:给出一个森林,每个节点都有一个权值。有若干加边操作,问两点之间路径上的第k小权值是多少。思路:这题和COT1比较像,但是多了连接操作。这样就只能暴力合并连个树。启发式合并会保证时间复杂度不至于太大。然后就是用可持久化线段树维护一个树的信息,按照dfs序来建树,每个节点的可持久化链的参考版本就是它父亲的版本。之后利用权值线段树可区间加减的特性,用f[x] + f[y] - f[

2014-10-21 09:37:06 2081

原创 POJ 3130 How I Mathematician Wonder What You Are! 半平面交求多边形内核是否存在

题目大意:定义一种多边形,叫做星形多边形。这种多边形就是有内核的多边形。给出一些多边形,问是否是星形多边形。思路:利用半平面交求解。PS:我的第一个多边形内核的代码不对。。一定要看这个,这个是我看了学长的代码之后才发现之前的代码的问题的,这个也不用微调,是准确值,总值千万不要去看前面的那篇!!!!由于内核中的所有点到图形上所有点的连线之间不能有边阻挡,所以为了满足任意一条边,需要满

2014-10-20 17:29:59 975

原创 BZOJ 2338 HNOI 2011 数矩形 计算几何

题目大意:给出平面上的一些点,求这些点中组成的矩形的最大面积。思路:任意找四个点然后判断肯定是不行的,那么我们不妨来想一想矩形的性质。比如,对角线的交点是两条对角线的中点,对角线相等。这样的话只要找到一对线段,使得他们的中点相同,并且长度相同,那么这两个对角线一定能够组成一个矩形。只有就可以利用叉积求出面积了。比较坑的一点是,这个题万万不能用double,因为有一个点专门卡doub

2014-10-20 15:54:53 939

原创 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 830

原创 POJ 3335 Rotating Scoreboard 半平面交求多边形内核

题目大意:多边形求内核模板题思路:半平面交,我用的是O(nlogn)的半平面交,但是有一个问题,就是当多边形内核是一个点的时候,半平面交所得到的答案是空集合,但是输出应该是yes,实在没有什么好的解决方法,最后只能把所有直线向右移动,然后在求内核。但是这样做eps的不同取值有的时候能A有的时候不能A。有没有什么好的解决方法啊!!!求解答啊!!!CODE:#inclu

2014-10-20 10:55:13 1052

原创 BZOJ 1003 ZJOI 2006 物流运输 动态规划+SPFA

题目大意:有一些码头由若干条边组成,有些时候有一些码头需要维修,这个期间不能使用这个码头。跟换航线的话会有一定的花费,求规定天数内的最小花费。思路:最短路方面用SPFA就行,关键是动态规划。这个动规我想了很久,结果到最后发现自己想复杂了。我一开始想的是用SPFA处理出每一个不同的段,然后动规。这样做不仅分段不好分,动规也不好写。之后才发现,一共天数才100,枚举起点和终点才10000,

2014-10-20 07:58:07 1127

原创 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 1071

原创 BZOJ 1007 HNOI 2008 水平可见直线 计算几何+栈

题目大意:给出一些笛卡尔系中的一些直线,问从(0,+∞)向下看时能看到哪些直线。思路:半平面交可做,但是显然用不上。类似于求凸包的思想,维护一个栈。先将所有直线按照k值排序,然后挨个压进去,遇到有前一个交点被挡住的话就先弹栈。比较闹心的是去重。我的方法是压栈之前先去重,然后在处理。CODE:#include #include #include #inclu

2014-10-17 17:15:05 1172

原创 BZOJ 1024 SCOI 2009 生日快乐 深搜

题目大意:有一块蛋糕,长为X,宽为Y,现在有n个人来分这块蛋糕,还要保证每个人分的蛋糕的面积相等。求一种分法,使得所有的蛋糕的长边与短边的比值的最大值最小。思路:刚拿到这个题并没有什么思路。但是定睛一看,(n 直接爆搜就可以水过。传三个参数,代表当前的长和宽,还有当前块需要被分成几块,然后随便乱搞就可以水过了。。CODE:#include #include

2014-10-17 14:33:14 1963

原创 BZOJ 2733 HNOI 2012 永无乡 平衡树启发式合并

题目大意:有一些岛屿,一开始由一些无向边连接。后来也有不断的无向边加入,每一个岛屿有个一独一无二的重要度,问任意时刻的与一个岛屿联通的所有岛中重要度第k大的岛的编号是什么。思路:首先连通性一定要用并查集维护,然后就是联通快内的第k大问题,显然是平衡树。但是并查集的合并怎么搞?可以考虑按秩合并,这样的话就保证每次在平衡树中处理的元素尽量的少,就可以水过这个题了。注意一下输出-1的判断

2014-10-17 10:39:24 1402

原创 BZOJ NOI 1999 钉子和小球 动态规划+分数类

题目大意:不太好描述,自己看吧。。思路:首先从最上面的点开始考虑,因为球一定是从最上面开始往下掉,所以球经过最上面的点的概率是1,然后他会有1/2的几率向左,1/2的几率向右,也就是下面的两个点均分上面点的几率。当然这是所有的点都存在的情况。如果有哪里的点不存在了,那么求落到这个点的几率不变,然后它的所有几率都会加在在它下面两行且在正下方的点。按照这样写dp方程,显然是不难的。之后

2014-10-16 14:22:42 1118

空空如也

空空如也

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

TA关注的人

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