自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UVA 10299 Relatives(欧拉函数)

题目:计算一个给定数的欧拉函数(1~n-1中和n互质的数的个数)。分析:先素数筛法,计算出50000内的素数,不能被前50000内的素数整除的数,也一定是素数,并且每个数n中最多有一个;#include #include#include#includeusing namespace std;int d[50000];int main(){ long long

2016-06-04 16:01:22 692

原创 UVA 11347 Multifactorials

题目:求一个数字n多阶乘的因子的个数。分析:求出数字n多阶乘的质因数和每个质因数的个数,然后排列组合#include #include#includeusing namespace std;#define N 2000int d[N],c[N];int main(){ int t; int k1=1; scanf("%d",&

2016-06-04 15:54:20 859

原创 UVA 10780 Again Prime? No Time(质因数分解)

题意:给你两个整数m和n,求最大的k使得m^k是n!的约数思路:首先我们先将m分解质因数,那么m^k就是各个质因数*k而已,那么我们只要判断每个质因数的指数在n!的对应的质因数的指数范围内,求所有质因数最小的一个,至于怎么求n!里某个质因数的个数,比如是2的话,那么只要计算n/2+n/4+n/8...的个数就行了,可以这么想每隔2个数就有一个2,然后是4...

2016-06-04 15:35:46 519

原创 uva 10553 Treasure Map

题意:给你海盗的航海路线,终点为宝藏地点,然后你的路线是按照海盗的航海路线偏移一定的角度去航行,求你在途中距离宝藏最近的是相距多少。分析:先求出宝藏地点,然后求出宝藏地点到你航行的所有边的距离#include #include#include#include#includeusing namespace std;#define

2016-05-25 16:53:04 866

原创 UVA, 10180 Rope Crisis in Ropeland!

题意:求两点之间的最短距离,如果两点穿过圆,则距离是两条切线加一段弧长,图上有。分析: 用三角形的余弦定理和正弦定理,可以求出相应的一些角度,其实这道题就是一个简单的几何问题,几何会做这道题就会了。#include #include#include#include#include#includeusing namespace std;#

2016-05-25 16:46:03 474

原创 UVA, 10286 Trouble with a Pentagon

题意:求正五边形里面最大正方形的边长。分析:  以五边形最上面的顶点作为原点,建立直角坐标系,用三角函数求出五边形所有的点的坐标,所有点都求出来了,正方形的不就进一步求出来了。#include #include#includeusing namespace std;#define PI 3.14159265358979struct point{ doub

2016-05-25 16:37:17 413

原创 uva,132 Bumpy Objects (凸包,角度)

题意:自己百度吧,有全翻译的。分析:先求凸包,然后判断重心是否在凸多边形的边上面,也就是说边和重心组成的三角形,重心为顶点,下面两个底角不为钝角就是说明此时重心在线段上侧。然后遍历所有点,判断是否在该边上,找到该边上标号最大的点。#include #include#include#includeusing namespace std;#define N 9

2016-05-25 16:28:29 786

原创 STL

C++ List的用法(整理)assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator() 返回list

2016-05-20 16:01:41 327

原创 POJ 3169 Layout

题意:n头奶牛,ml对关系好的,md对关系不好的,关系好的必须在距离dl范围内,关系不好的必须在距离dd外,同一个地点可以有有多只奶牛,求第一头和最后一头的最大距离,特殊情况:无解输出-1,无限大输出-2。分析:d[i+1]+0>=d[i],d[al]+dl>=d[bl],d[bd]+(-dd)>=d[ad],满足三个关系,构建了一个求最短路径图,由于存在负数的边,用bellman—ford算

2016-05-18 20:54:21 286

原创 POJ, 3723 Conscription(最小生成树)

题意:征女兵n人,男兵m人。每征兵一个人话费10000美元,如果已经征的人中有关系亲密的人,征另外的人是10000减去亲密度,求最少费用。分析:建立森林,边的权值为亲密度的相反数,然后用最小生成树连接所有点,得到可以节约的最大费用(是负数),结果也就出来了。#include #include#include#include#inclu

2016-05-18 20:39:27 327

原创 POJ, 3255 Roadblocks(次短路径)

题意:求1到n的次短路径。分析:dijistra算法,每次记录最短距离和次短距离。#include #include#include#includeusing namespace std;#define N 10005#define INF 0x7fffffffstruct edge{ int to,cost;

2016-05-18 20:37:19 375

原创 poj 1127 Jack Straws(两线相交,并查集)

题意:给你n条线段,编号从1到n,然后判断两个线段(输入以0,0结束)是否相连(间接相连也算相连)。分析:公式:p1*p2=(x1*x2,y1*y2)(内积),p1xp2=(x1*y2,x2*y1)(外积)判断q是否在线段p1-p2上面,根据(p1-q)x(p2-q)=0来判断q是否在直线p1-p2上。利用内积(p1-q)*(p2-q)p1-p2,q1-q2的交点:

2016-05-17 15:28:14 453

原创 UVA 10078 The Art Gallery(凸包)

题意:判断是否为凸多边形,是就输出No,不是输出Yes分析:采用凸包解决,用Graham扫描算法,就出来了#include #include#include#includeusing namespace std;#define N 105#define EPS 1e-3struct point{ double x,y; point(d

2016-05-17 10:12:37 471

原创 UVA 10002 Center of Masses(凸包)

题意:判断是否为凸多边形。分析:用Graham扫描算法,就出来了#include #include#include#include#includeusing namespace std;#define EPS 1e-10#define N 100005struct point{ double a,b; point(){}

2016-05-16 22:47:29 587

原创 UVA, 681Convex Hull Finding(凸包)

题意:求凸包上的点。从那个最下面的点逆时针输出。分析:采用凸包解决,用Graham扫描算法,就出来了#include #include#include#includeusing namespace std;#define N 666#define EPS 1e-3struct point{ double x,y; point(double x

2016-05-16 22:40:49 562

原创 UVa 109 - SCUD Busters(凸包)

题意:输入n个国家,每个国家一些点,用围墙(多边形)围起来,围墙内的范围都属于这个国家,现在要发射一些导弹,如果导弹落到国家内,那对应的国家就会停电,现在问停电的总面积。分析:1,求凸包,Graham扫描先把围墙上的点求出来,凸包完成。2,求国家的面积,把多边形分成多个三角形,叉积a*b*sin就是三角形面积的两倍,然后相加求得多边形面积。3,判断点是否在多边形内,用射线进行判断,从该

2016-05-16 22:28:34 435

原创 poj 2187 Beauty Contest (凸包 Graham)

题意:给你n个点,求两点之间距离最大值(也就是相隔最远的两个点之间的距离)分析:采用凸包解决,先用Graham扫描算法,求出最外围的点,然后再求最外围两点之间的距离,得出最大的。#include #include#includeusing namespace std;#define N 50005struct point{ int x,y;

2016-05-15 17:24:27 256

原创 POJ, 2069 Super Star(模拟退火算法)

题意:给定几个点,要求覆盖这些点的最小球半径。分析:可以采用模拟淬火算法,随机选取一个点作为初始解,然后不断向当前距离最远点靠近,这是一个不断调整的过程,将对应模拟淬火算法中不断向内能最低(半径最小)这一目标函数逼近,温度对应控制变量。#include #include#include#include#include#includeusing n

2016-05-13 15:33:51 871

原创 HDU 3932 Groundhog Build Home (模拟退火算法)

题意:找出一个点使得这个点到n个点的最长距离最短。分析:模拟退火算法。#include #include#include#include#include#includeusing namespace std;#define N 1005#define NUM 20#define D 50#define EPS 1e-3double a[N],b

2016-05-13 15:26:24 1162

原创 POJ,2420 A Star not a Tree?(模拟退火算法)

题意:平面上给你n个点,让你求一个点,到这n点的距离和最小。分析:模拟退火算法。#include #include#include#include#includeusing namespace std;#define N 1005#define INF 1e20#define D 25#define EPS 1e-3double a[N],b[N

2016-05-13 15:25:07 908

原创 POJ, 1379Run Away(模拟退火算法)

题意:在给定的范围内找一点,使得该点到所有点距离最小距离最大,求这个最大距离。分析:模拟退火算法,先随便找一个点,然后运用模拟退火算法。退火算法参考:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html#include #include#include#include#i

2016-05-13 15:08:47 659

原创 POJ 2785 4 Values whose Sum is 0(折半枚举)

题意:给你n个整数的四个数列,从每个数列选出一个数,使得他们相加为0,求这样的组合个数,同一个列相同的数当成不同的看待。分析:直接暴力枚举,n^4超时,选出两个进行枚举得到数组cd,将结果排序,然后对另外两个进行枚举,然后二分搜索查找cd,判断是否存在于与其互为相反数的,时间复杂度n^2logn.#include #include#includeusi

2016-05-13 09:55:49 523

原创 poj 2348 Euclid's Game

题意:给两个整数,stan和olice轮流从较大的数中减去较小数字的倍数,不能出现负数,谁在自己回合内得到0,则获胜,stan先手。,问谁获胜。分析:每次令a大于b,1 如果a-b2. a-b>b,则有多种减的方法,a减去b的倍数后,可能结果小于b,如果小于b,下一步将是固定的走法;如果减去后达到第一种情况,后面也还是固定减法,即此时你可以决定后面的两种减法(必胜和必败),也就

2016-05-12 22:18:19 652

原创 POJ 3320 Jessica's Reading Problem(尺取法)

题意:给你一个连续的串,找出一个连续且包含所有出现的数字的子串,求这个子串最短为多少。分析:尺取法,先得出出现的不同数字的个数np,然后从头开始先选出等于np的子序列,然后减去该子序列左边的值,减去后如果还是等于np,继续减去左边的值,如果小于np了,则向右加,直到再次达到np.类似题POJ 3061 - Subsequence,http://blog.csdn.net/itaskyo

2016-05-12 21:21:56 412

原创 POJ 3061 - Subsequence

题意:给你N个数,求总和不小于s的连续子序列的最小长度。分析:从头开始先选出大于等于s的子序列和,然后减去该子序列左边的值,如果小于s,则子序列友继续往后加,大于s则,继续减去左边的值。#include #includeusing namespace std;#define N 100005int a[N];int main(){ int

2016-05-12 20:53:08 337

原创 poj 2456 Aggressive cows(二分搜素)

题意:直线上N个点,标记其中M个点,使得所有标记点之间最短距离最大,求这个最大的距离。解题思路:简单的二分搜索应用。#include #include#includeusing namespace std;#define INF 1000000005#define N 100005int a[N];int main(){ int n,m;

2016-05-12 20:27:21 330

原创 poj 1064 Cable master(二分搜索)

题意:给你N条绳子,并告诉你每条的长度,把这些绳子切割成k条长度相等的绳子,求每条最长为多少。思路:二分查找最后每条绳子的长度,然后去计算可以切成多少根这样的绳子,然后和k比较,大于等于K,则说明绳子长度还可以增加。小于说明绳子太长了,需要更短一些。#include #include#include#include#inclu

2016-05-12 19:37:21 411

原创 poj1182食物链(并查集)

解题思路:并查集,三个种类,为每一个动物都创建三个种类,然后每次先判断输入是否合理,如果合理然后在联合。#include #includeusing namespace std;#define N 50005void init(int n);int find(int x);void unite(int x,int y);bool same(int x,in

2016-05-12 18:24:21 337

原创 POJ2484 A Funny Game

题意:每次拿两个或者一个硬币,两个必须是连续的,拿完最后的硬币的人获胜,alice先拿。解题思路:每次后手取和先手对称的硬币,后手就绝对会赢,当先手可以在第一次全部取完的情况下,先手赢。#include #includeusing namespace std;int main(){ int n; while(cin>>n&&n)

2016-05-12 18:21:36 498

原创 UVA 10006 - Carmichael Numbers (模平方)

题意:对任意的2<=x<n都有x^n=x mod n成立的合数n称为Carmichael number,给定一个整数n,判断它是不是Carmichael number。注意:前提条件是合数,用模平方法枚举所有的x,乘法会超int。#include #includeusing namespace std;#define N 65005int prime[N

2016-05-12 11:01:35 422

原创 poj,2431Expedition 贪心 + 优先队列

题意:从起点到终点,途中有n个加油站,每个加油站的加油的油量有限,一个卡车的油箱无限,每走一个单元要消耗一单元的油,问卡车到达终点的最少加多少次油。(注意:加油站的位置是到终点的距离)解题思路:当油量充足的时候,一直向前走,并且将途中的加油站加的油量放入优先队列(按大到小排序),当没有油了,优先队列弹出顶端的加油,直到加的油保证可以到达下一个加油站或者终点,把终点当做一个加油站,加的油为0。

2016-05-12 10:15:01 451

原创 POJ, 3069Saruman's Army(贪心)

题意:给你n个点,标记其中尽可能少的点,使得n个点都处于被标记点左右不超过R的区间内,可以理解为蜡烛照亮所有的地方,蜡烛只能放在出现的点处。先排序,然后贪心。#include #include#include#includeusing namespace std;#define N 1005int a[N];int main(){ i

2016-05-12 00:04:53 415

原创 uva11343 - Isolated Segments(两线段相交)

题意:给你一些线段,求没有和其他线段相交的线段数量公式:p1*p2=(x1*x2,y1*y2)(内积),p1xp2=(x1*y2,x2*y1)(外积)判断q是否在线段p1-p2上面,根据(p1-q)x(p2-q)=0来判断q是否在直线p1-p2上。利用内积(p1-q)*(p2-q)p1-p2,q1-q2的交点:(x,y)=p1+(p2-p1)*((q2-q1)x(q1-p1)/

2016-05-10 11:12:10 1508

原创 uva191 Intersection(线段之间相交)

题意:是否线段与矩形相交,线段在矩形内部也是相交。公式:p1*p2=(x1*x2,y1*y2)(内积),p1xp2=(x1*y2,x2*y1)(外积)判断q是否在线段p1-p2上面,根据(p1-q)x(p2-q)=0来判断q是否在直线p1-p2上。利用内积(p1-q)*(p2-q)p1-p2,q1-q2的交点:(x,y)=p1+(p2-p1)*((q2-q1)x(q1-p1)/((

2016-05-10 10:05:37 1791

原创 UVa 10902 Pick-up Sticks (线段与线段相交)

题目:有n根木条,一根一根的往一个坐标系上丢(给出木条两点的坐标),问最后不被覆盖的木条有哪些,即丢的木条如果和前面丢的木条交叉的话,就会覆盖前面那根木条。公式:p1xp2=x1*y2-x2*y1(外积),p1*p2=(x1*x2,y1*y2)(内积)判断q是否在线段p1-p2上面,根据(p1-q)x(p2-q)=0来判断q是否在直线p1-p2上。利用内积(p1-q)*

2016-05-09 22:42:56 1430

原创 UVa 378 - Intersecting Lines

题目:给你平面上的两条直线,判断两直线关系,平行,重合,相交,如果相交求交点。公式:p1xp2=x1*y2-x2*y1(外积)判断q是否在线段p1-p2上面,根据(p1-q)x(p2-q)=0来判断q是否在直线p1-p2上。两直线平行:(p1-p2)x(q1-q2)=0,为什么?把两条直线的斜率写出来并且令他们相等,这个等式就是这个公式。p1-p2,q1-q2的交点:(

2016-05-09 20:32:56 1622

原创 UVA, 112Tree Summing

题意:一棵树从上到下相加,问是否出现该值出现的值为5+4+11+7=27,5+4+11+2=22,5+8+13=26,5+8+4+1=18dfs算法,用一个数组每次递归记录下当前的值,读到根,把数组的值相加。#include #include#includeusing namespace std;#define N 1000int n;int sum

2016-05-07 17:43:53 409

原创 UVA, 753 A Plug for UNIX

题意: 4 4个插座,下面是名称,不一定时单字母,可能是字符串 A B C D 5 5个设备,名称 插头 laptop B phone C pager B clock B comb X 3 3种转换器 ,个数无限 B X X A X D 问最少设备不能使用的数量 建立最大流,超级源点连接所有的设备,超级终点连接所有的插座,设备插座

2016-05-07 17:21:17 387

原创 UVA, 820 Internet Bandwidth

最大流,注意是无向图,水题。#include #include#includeusing namespace std;#define N 105#define INF 1000000struct edge{ int to,cap,rev; edge(int a,int b,int c) { to=a; cap=b;

2016-05-07 17:17:55 476

原创 poj,1273Drainage Ditches

单纯的最大流问题,单向的。

2016-05-07 17:06:29 416

空空如也

空空如也

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

TA关注的人

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