自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

肘子的博客

向流星许愿

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

原创 Triangle POJ - 2079(旋转卡壳+平面凸包)

传送门参考:传送门 题意:给出一组点,从这些点里面选择三个点构成三角形。求这个三角形面积最大是多少?题解:凸包很容易想到三角形的三个点肯定在凸包上面,但是关键怎么找出来三个点。一一枚举肯定超时。 如果固定一条边的话,那么枚举剩下的一个点,在枚举过程中面积肯定有达到极大值后又减小。根据这一特性,可以先固定一点i,然后让另外两点a,b不断旋转来找三角形面积最大值(a,b事先设定...

2018-08-31 11:42:24 176

原创 Beauty Contest POJ - 2187 & P1452 Beauty Contest(平面凸包+旋转卡壳)

传送门传送门题解:使用平面凸包+旋转卡壳算法平面凸包使用安德鲁算法:传送门旋转卡壳:其实就是两个平行线正好把凸包卡住,其中卡着的点称为对踵点对.   很容易想象,某两个平行线对应的对踵点对最多只有四个。   那么怎么才能找到最远点对呢?      对于上图中的6个三角形的公共底边,可知当三角形的顶点在凸包上按逆时针旋转时,三角形的面积先由小变大再由大变小,即...

2018-08-31 10:02:54 294

原创 Cows POJ - 3348 (平面凸包graham算法+多边形面积)

传送门题解:使用平面凸包graham算法+多边形面积平面凸包——>传送门多边形面积——>传送门附上代码:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn=10010;struct poi...

2018-08-29 12:07:06 352

原创 平面凸包(Graham算法)

 附上代码:#include<bits/stdc++.h>using namespace std;const int maxn=10005;const double eps=1e-10;struct point{ double x,y; point(){} point(double _x,double _y){ x=...

2018-08-29 09:49:29 1228

原创 平面凸包(jarvis算法)

算法大体思想:形成凸包的构造函数是这样的,找到一条直线l过其中一点(记为A)并且所有其他点都在l的同侧(显然这样的直线一定可以找到),则A必为凸包上的一点。让l以A为轴点向一个方向(比如:顺时针方向)不断旋转,直到l碰到除A以外的第一个点(记为B)。如果同时碰到多于一个点,则取与A点距离最大的。再次以B为轴点,向相同的方向的旋转l,重复上述过程,直到l回到A点。附上代码:#includ...

2018-08-29 08:50:21 2049 2

原创 Stacking Cylinders POJ - 2194 (判断顶端圆的位置)

传送门题意:给出最低端一排桶的横坐标,最后得出最顶端桶的坐标题解:一个一个桶分析,当加了一个桶以后,那么就可以看出顶端圆的变化,顶端圆横坐标的变化是增加了(x[i]+x[i+1])/2,纵坐标的变化是增加了sqrt(4-(x[i+1]-x[i])*(x[i+1]-x[i])/4)附上代码:(这个代码有点强,在voj上排了个第一)#include<iostream&gt...

2018-08-28 17:36:06 235

原创 Area in Triangle POJ - 1927(求三角形内周长一定的图形的最大面积)

传送门题解:如果绳子足够长,那么直接输出三角形的面积,如果绳子不够三角形的内接圆,那么输出绳子构成的圆的面积,如果绳子正好处于两者之间呢?使用物理上的“撑开”原理最后的面积就是大三角形的面积减去小三角形的面积再加上校园的面积就是所要的答案,这个时候设小圆的半径为r,大圆的半径为R,为了求出小三角形的面积,尽量使用大三角形的面积跟据比例直接得出来,那么就得得出r/R的值,因为(A+B+C...

2018-08-28 14:50:38 396

原创 判断一个矩形是否能容下两个圆

传送门题解:最基本的条件是,半径大的圆能放进去,也就是满足条件min(a,b)>=max(r1,r2)*2然后直接考虑临界条件:两个圆靠近成相切状态,达到这种临界状态后,此时就不能收缩了。所以此时设z=r1+r2,x=a-z,y=b-z,如果x^2+y^2>=z^2,那么就可以放下附上代码:#include<iostream>#includ...

2018-08-28 10:31:04 660

原创 Ellipsoid HDU - 5017(模拟退火)

传送门题解:使用模拟退火算法,先设ansx=0,ansy=0,ansz=sqrt(1.0/c),然后进行模拟退火算法,最后得出答案附上代码:#include<bits/stdc++.h>using namespace std;const double eps=1e-10;double a,b,c,d,e,f;double ansx,ansy,ansz;...

2018-08-28 09:49:46 232

原创 P1337 [JSOI2004]平衡点 / 吊打XXX

传送门题解:使用模拟退火算法,关于模拟退火算法的讲解传送门题解:只要使得也就是总的重力势能最小,就可以使系统平衡,所以通过模拟退火算法进行随机模拟附上代码:#include<bits/stdc++.h>using namespace std;const double delta=0.993;struct Node{ int x,y,weight;...

2018-08-27 22:18:33 133

原创 爬山算法 ( Hill Climbing )/模拟退火(SA,Simulated Annealing)

一. 爬山算法 ( Hill Climbing )爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。 二. 模拟退火(SA...

2018-08-27 20:42:55 52703 1

原创 YJJ's Salesman HDU - 6447(二维dp变一维,树状数组+离散化+dp)

传送门题意:从 (0,0)往 (10^9,10^9) 走,每次只能从 (x,y) 走到(x+1,y) 或者 (x,y+1) 或者 (x+1,y+1),不能折返,不能走重复的路,在地图上分布着一些村庄,给出村庄的坐标(x,y) 和 v值,当且仅当你从(x−1,y−1) 走到村庄时,你才可以获得 v,求最大能获得多少 v。题解:显然,假设我走到了某一个村庄 (x0,y0),那么只有...

2018-08-27 20:07:47 319

原创 Matrix Multiplication POJ - 3318(随机算法)

传送门题意:给出三个n*n矩阵的矩阵a,b,c问a*b是否等于c,等于输出YES,否则输出NO,n的最大值是500,计算矩阵乘法的话需要O(n^3)的复杂度,很明显超时。题解:随机出一列k,计算a*(b*k) 和c*k,计算出一列的值,这样的如果a*b==c那么a*(b*k) 和c*k也一定会相等的,因为是随机的数,所以可以多测试几次。附上代码:#include<iost...

2018-08-27 11:33:21 189

原创 Jersey Politics POJ - 2454 (随机算法)

传送门题意:给定一个长度为3*K的整数序列S,将其划分为等长(各为K)的三个子序列S1,S2,S3,要求其中至少两个子序列各自的加和大于500*K,求满足上述条件的一个划分(所有输入必有解)。题解:首先采用贪心策略,对输入序列S进行降序排序,将排序后的前2*K个元素划分给S1和S2,不再考虑S3。设S'=(S1,S2),现在考虑采用随机化算法,第一种策略:循环地随机重排S'中的所有元素...

2018-08-25 21:24:57 178

原创 随机算法

随机算法:它在接受输入的同时,在算法中引入随机因素,通过随机数选择算法的下一步。随机算法可理解成在时间,空间和精度上的一种的平衡。常见的随机算法有:数值概率算法,蒙特卡罗算法,拉斯维加斯算法和含伍德算法。数值概率算法常用于数值问题的求解。往往得到近似解,近似解的精度随着计算时间的增加不断提高。例如在计算Π的近似值时,我们可以在单位圆的外接正方形内随机撒n个点,设有k个点落在单位圆内,可...

2018-08-25 20:43:48 1719

原创 最小圆覆盖

HDU3007P1742 最小圆覆盖P2533 [AHOI2012]信号塔这三道题都是最小圆覆盖问题,只不过数组或者输出形式有点变化而已随机增量法是一个可以在 期望 O(n)时间内求出最小圆覆盖的算法,首先它的算法流程是这样的枚举第一个点 i,若不在目前圆内,设它为圆心枚举第二个点 j,若不在当前圆内,设当前圆为以 i,j 为直径的圆枚举第三个点 k,若不在当前圆内,设...

2018-08-25 10:10:45 757

原创 三角形的外切圆

两种方法:方法一:我们设一个圆的圆心坐标为 (x0,y0),半径为 r。那么这个圆的方程可以写为:在这个圆上随便取三个点,设这三个点的坐标分别是 (x1,y1),(x2,y2),(x3,y3)。那么有:公式(1)(2)相减,(1)(3)相减之后经过化简可以得到:x0,y0有唯一解的条件是系数行列式不为 0: 简单变变型也就是: 这样写几何含义就很明显...

2018-08-25 09:25:10 3000

原创 P4196 [CQOI2006]凸多边形(半平面交)

传送门题解:使用排序增量算法,先占个位置,这个代码是我测试过所有此模板中还未发现bug的代码.附上代码:#include<bits/stdc++.h>using namespace std;const double eps=1e-13;struct point{ double x,y; point operator -(point &...

2018-08-24 11:29:00 205

原创 Intersecting Lines POJ - 1269 (两直线的交点)

传送门题意:给出两条直线上的两点求两直线的交点。 思路: 一般方程法: 直线的一般方程为F(x) = ax + by + c = 0。既然我们已经知道直线的两个点,假设为(x0,y0), (x1, y1),那么可以得到a = y0 – y1, b = x1 – x0, c = x0y1 – x1y0。 (这个怎么推的呢 ?逆着推,根据过这两点,然后写出两点式,最后对比下得出结果)因此我...

2018-08-23 16:48:23 229

原创 A Dangerous Maze LightOJ - 1027(概率)

传送门题目大意:迷宫里面有n扇门,每扇门有相应的值,假设第i扇门的值为xi,如果xi > 0,那么xi分钟后,走该扇门就可以走出迷宫了,如果xi < 0,表示走了该扇门之后,需要abs(xi)分钟后才能回到原点,问走出迷宫的期望是多少解题思路:假设有k扇门(正值用x表示,负值用y表示)期望是d的话 那么d = 1 / k * (x1 + x2 + x3 + .. xn) + ...

2018-08-23 12:27:49 144

原创 事件与概率

找东西的诱惑问题描述:现在书桌上有8个抽屉,分别用数字1~8表示,每次拿到一个文件后,都会把这份文件随机地放到一个抽屉里,但是,我非常粗心,有1/5的概率会忘了把文件放进抽屉里,最终把这个文件丢失,现在,我要找一份非常重要的文件,我会按照顺序打开每一个抽屉,知道找到这份文件为止,或者发现给弄丢了,计算问题的答案?1.假如我打开了第一个抽屉,发现里面什么也没有,那么,这份文件在其他7个抽...

2018-08-22 18:52:57 1259

原创 Arc of Dream HDU - 4686 (构造矩阵+矩阵快速幂)

传送门题解:构造矩阵+矩阵快速幂附上代码:#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef long long ll;const ll mod=1000000007;struct node{ ll x[6][6...

2018-08-21 15:29:14 192

原创 Reading comprehension HDU - 4990 (打表+高斯消元+矩阵快速幂)

传送门题解:先打出前几个数,然后套下高斯消元的板子,最后就是矩阵快速幂了附上代码:#include<iostream>#include<cstdio>using namespace std;typedef long long ll;struct node{ ll a[4][4];};node shu,ans,mp;ll n,mod...

2018-08-21 11:44:44 174

原创 233 Matrix HDU - 5015 (递推+矩阵快速幂)

传送门题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n<=10,m<=10^9),给出式子: A[i][j] = A[i-1][j] + A[i][j-1],要求A[n][m]。解法:假设要求A[a][b],则A[a][b] = A[a][b-1] + A[a-1][b] = A[a][b-1] + A[a-1][b-1] + A...

2018-08-21 10:13:06 201

原创 Jzzhu and Sequences CodeForces - 450B (矩阵快速幂)

传送门题解:推导出公式,使用矩阵快速幂解决 附上代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7;const int N=2; struct node{ ll a[3][3];};node shu,ans,mp;...

2018-08-21 08:08:04 132

原创 判断两线段相交

一种常用的方法是通过向量叉积来判断的,这种方法不需要算出直线方程,在代码实现上比较简便。 用这种方法判别线段是否相交一般分为两步: 1. 快速排斥实验 2. 跨立实验快速排斥实验我们首先判断两条线段在 x 以及 y 坐标的投影是否有重合。 也就是判断下一个线段中 x 较大的端点是否小于另一个线段中 x 较小的段点,若是,则说明两个线段必然没有交点,同理判断下 y。附上代码:...

2018-08-20 15:39:14 13386 6

原创 网络流(Dinic算法)(理解代码,白书代码,kuangbin代码)

先了解FF思想以及了解EK算法传送门但是EK算法为什么如此朴素?知道了增广路的实现,但是单纯地这样选择可能会陷入不好的境地,比如说这个经典的例子:我们一眼可以看出最大流是999(s->v->t)+999(s->u->t),但如果程序采取了不恰当的增广策略:s->v->u->t我们发现中间会加一条u->v的边而下一次增广时:若选择了...

2018-08-20 09:40:01 2723 3

原创 矩形面积交(线段树+扫描线)

传送门我们要计算被覆盖两次或以上的部分面积,我们在线段树节点中增设了一个变量,more,其中len表示该该区间内被覆盖了1次或以上的长度,more表示被覆盖了2次或以上的长度怎么计算最后的面积的?一样的道理,从下往上扫描矩形,每次添加一条矩形上下边,然后看看t[1].more是多少,再乘上高度差。因为t[1]表示了总区间,而more表示被覆盖两次或以上的长度,即计算时我们忽略掉只被覆盖一次...

2018-08-18 08:18:00 447 1

原创 Wooden Sticks UVALive - 2322 (贪心)

传送门题意:求解最小启动时间题解:常规的贪心思想即可附上代码:#include<bits/stdc++.h>using namespace std;const int maxn=5050;bool used[maxn];struct node{ int l,w;};node nodes[maxn];bool cmp(node a,no...

2018-08-17 09:42:51 157

原创 Shoemaker's Problem UVA - 10026(贪心)

Shoemaker's Problem UVA - 10026题意:输出一个工作序列,使得罚金最少题解:使用除法,跟据此工作的罚金影响程度进行排序,最后得出序列附上代码:#include<bits/stdc++.h>using namespace std;const int maxn=1050;struct node{ int t,f,no; ...

2018-08-17 09:07:39 146

原创 Tian Ji -- The Horse Racing UVA - 1344 (贪心)

传送门题意:田忌赛马题解:首先比较田忌和齐王最快的马1.如果田忌最快的马大于齐王最快的马,那么就赢一局2.如果田忌最快的马小于齐王最快的马,那么田忌最慢的马和齐王最快的马,输一局,反正都要输,不如输个烂马3.如果田忌最快的马和齐王最快的马相同,那么看最慢的马两者的比较 ,如果田忌最慢的马小于齐王最慢的马,反正都要输一局,不如输个烂马,如果田忌最慢的马和齐王最慢的马相同,那么就最...

2018-08-17 08:40:02 141

原创 Pass-Muraille POJ - 1230(贪心)

传送门题解:从左到右扫描,如果某一行所要越过的墙数已经大于能量,那么就得拆除多余的墙,怎么拆呢,依次拆除最长的墙就行了附上代码:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=150;int mapp[max...

2018-08-17 07:51:57 243

原创 网络流最大流(Ford-Fulkson方法以及Edmond-Karp算法)

Ford-Fulkson(简称FF)方法是由Ford和Fulkson两位数学家发明的。充分利用了最小割最大流定理,并创造性的发明了回退边,使得增广路成为一种动态修改的过程,并且保证了最终结果的正确性。FF方法的具体步骤:(1).初始化网络中所有边的容量,c<u,v>继承该边的容量,c<u,v>初始化为0,其中边<v,u>为回退边。初始化最大流为0.(...

2018-08-16 21:36:25 2000

原创 线段树辅助——扫描线法计算矩形周长并(轮廓线)

例题:hdu 1828 Picture       poj 1177使用扫描线操作附上代码:#include<bits/stdc++.h>using namespace std;const int maxn = 50004*2;struct node{ int l,r; int len; //有效长度 int lf,rf; //实际...

2018-08-16 20:56:58 465

原创 判断点在多边形的内外

方法一:扫描法(使用于任意多边形)通常情况下,当射线与多边形的交点个数是奇数时,Q在多边形内,是偶数时,Q在多边形外。通常将射线设为水平向右,那么就有一些特殊情况值得考虑1.射线与多边形的顶点相交,这是交点只能计算一个。2.射线与多边形顶点的交点不应该被计算3.射线与多边形的一条边重合,这条边应该被忽略算法描述:首先,对于多边形的水平边不做考虑,其次,对于多边形...

2018-08-16 11:58:48 17709 5

原创 判断点在三角形内外

点在平面内与三角形三个顶点中任意两点构成三个三角形,可以通过计算这三个三角形的面积和与原三角形面积比较来判断是否在三角形内设有三角形ABC,判断点Q是否在三角形内(包含在某条边上),则当:S(PAB)+S(PBC)+S(PAC)=S(ABC)三角形计算公式:S=1/2*|cross(a,b)|struct triangle{ point a; point b; ...

2018-08-16 09:20:57 1112

原创 判断点是否在线段上

设有点Q以及p1p2,判断点Q在线段p1p2上包含两条依据:1.(Q-p1)*(p2-p1)=0(叉乘)2.Q在以p1,p2位对顶顶点的矩形内前者保证了点Q在直线p1p2上,后者保证了点Q不在线段p1p2的延长线或者反向延长线上。bool onsegment(point pi,point pj,point Q){ if((Q.x-pi.x)*(pj.y-pi.y)==(...

2018-08-16 09:03:05 11493

原创 Ikki's Story IV - Panda's Trick POJ - 3207 (2-SAT)

传送门通过关系构图,然后进行跑2-SAT模板附上代码:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1005;const int maxm=2000005;const int inf=1000000000;...

2018-08-15 21:04:00 145

原创 2-SAT问题

首先推荐两个资料:伍昱 由对称性解2-sat问题(ppt)赵爽 2-sat解法浅析(pdf)概念:       要知道2-sat是什么,我们先要知道什么是适定性(Satisfiability)问题,适,就是合适,定,就是确定,适定性问题通俗的说就是确定是否可以满足所有的条件?或者说就是确定一个满足所有条件的方案。取英文的前三个字母,简称sat问题。  通俗的sat问题表述一般是...

2018-08-15 20:36:57 343

原创 Peaceful Commission HDU - 1814 (2-SAT)(输出最小字典序)

传送门题意:就是有n党派,每个党派两个人,只能够从中选择一个人进入委员会。同时,有m组关系,表示某两个人不能够同时出现在委员会中。求出字典序最小的委员会名单。题解:一个2-sat问题,因为要求出最小字典序,只能够用最暴力的方法,时间复杂度为O(nm)。 通过2-sat问题构图1.首先对当前点x进行染色,染为可行,其党派内的对应结点x’则染为不可行。 2.访问所有和x相连的结点vi,...

2018-08-15 11:29:13 275

空空如也

空空如也

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

TA关注的人

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