自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

忘川蒿里

若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。

  • 博客(35)
  • 资源 (2)
  • 收藏
  • 关注

原创 POJ2187->凸包

POJ2187->凸包题意: 给出平面上n个点,求出这些点中距离最大的两个点。题解: 如果逐个枚举,时间复杂度将会相当高,不能满足题目要求。 可以构建一个凸包,再在凸包中枚举各个顶点之间的距离求最大值。代码:#include <stdio.h>#include <iostream>#include <cmath>#include <algorithm>#include <f

2016-08-30 23:38:52 337

原创 凸包Graham扫描法->HDU3847

Graham扫描法求凸包凸包定义: 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。 凸包最常用的凸包算法是Graham扫描法和Jarvis步进法。 Graham扫描法: 首先,找到所有点中最左边的(y坐标最小的),如果y坐标相同,找x坐标最小的. 以这个点为基准求所有点的极角(atan2(y-y0,x-x0)),并按照极角

2016-08-30 00:29:27 611

原创 HDU1730->Nim博弈

HDU1730->Nim博弈题意: 游戏在一个n行m列(1 ≤ n ≤ 1000且2 ≤ m ≤ 100)的棋盘上进行,每行有一个黑子(黑方)和一个白子(白方)。执黑的一方先行,每次玩家可以移动己方的任何一枚棋子到同一行的任何一个空格上,当然这过程中不许越过该行的敌方棋子。双方轮流移动,直到某一方无法行动为止,移动最后一步的玩家获胜。 判断先手的胜负情况。题解: 等效于nim博弈。

2016-08-29 15:34:03 534

原创 HDU1536->SG函数

HDU1536->SG函数题意: 给出n堆石子,每次只能按照规定的取石子个数取,输出先手的胜负情况。题解: 递归求出sg函数就能解决问题。代码:#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std ;int s[110] , sg[10010

2016-08-29 14:52:11 416

原创 HDU3032->SG函数

HDU3032->SG函数题意: 两个人玩游戏,有n堆石子,每堆个数不等,可以进行的操作是从任一堆中取任意颗石子,或者把这堆石子分成两堆。 给出一个初始的局面,判断先手胜还是后手胜。题解: sg(n)代表从当前状态到游戏结束最多需要多少步当有n堆石子时,游戏相当于一个组合博弈,当前的sg值就是每堆石子的sg值异或的结果。 对于任意的一个 Anti-SG 游戏,如果我们规定当局面中所

2016-08-28 18:27:57 591

原创 HDU1700->向量旋转

HDU1700->向量旋转题意: 一个圆的圆心在(0,0),已知圆上一点,求另外两点使得这三点构成的圆内接三角形周长最大。题解: 圆的内接三角形中,周长最大的为正三角形。 已知一点即知道了圆的半径,和一个圆心与该点构成的向量,旋转这个向量即可得到另外两个点。代码:#include <stdio.h>#include <iostream>#include <cmath>usin

2016-08-27 23:40:30 541

原创 POJ1106->叉积判断点在直线的左右

POJ1106->叉积判断点在直线的左右题意: 给定平面上一些点的坐标,有一个半径固定,圆心固定且可以旋转的半圆形平面,求这个平面能覆盖到的最大点的数量。题解: 由于圆心半径一定,所以有效的点的坐标即是在这个圆形区域内的点的坐标,可以开个数组记录一下,之后可以通过枚举圆心和这些有效点构成的直线,并通过叉乘来统计每次在这条直线左侧的点的数量来更新答案。代码:#include <stdio.

2016-08-27 23:33:13 1792

原创 分治法求两点间最短距离->HDU5721

分治法求最近点对的距离:主要思想就是先把n个点按x坐标排序,然后求左边n/2个和右边n/2个的最近距离,最后合并。合并过程: 首先,假设点是n个,编号为1到n。我们要分治求,则找一个中间的编号m,先求出1到m点的最近距离设为d1,还有m+1到n的最近距离设为d2。这里的点需要按x坐标的顺序排好,并且假设这些点中,没有2点在同一个位置。(若有,则直接最小距离为0了)。 然后,令d为d1,

2016-08-27 00:25:44 4642

原创 POJ2653->判断线段相交

POJ2653->判断线段相交题意: 有一些线段,按顺序给出,后给出的线段可能会覆盖住先给出的线段,求这些线段中最后没有被覆盖住的线段的编号。题解: 一次输入所有线段后,枚举编号1-n,用跨立实验去验证每条线段有没有被后面的线段覆盖,一旦查询到有编号大于它的线段跨立它,则跳出当前循环。代码:#include <stdio.h>#include <iostream>#include <

2016-08-27 00:06:13 559

原创 POJ2318->叉积判断点在线段的左右

POJ2318->计算几何题意: 已知n条线段把一个区域分成了n+1部分,给出一些点的坐标,求每个小区域中有多少个点。题解: 利用叉积,线段两个端点为p1p2,记玩具坐标为p0,那么如果(p0p1 X p0p2) 叉积是小于0,那么就是在线段的左边,否则右边。 枚举即可,也能用二分优化。代码:#include <stdio.h>#include <iostream>#inclu

2016-08-25 18:21:38 792

原创 跨立实验判断线段是否相交->POJ3304

在二维坐标下介绍一些定义:点:A(x1,y1),B(x2,y2) 向量:向量AB=( x2 - x1 , y2 - y1 )= ( x , y ); 向量的模 |AB| = sqrt ( x*x+y*y );向量的点积:向量叉积 结果为 x1*x2 + y1*y2。 点积的结果是一个数值。 点积的集合意义: 我们以向量 a 向向量 b 做垂线,则 | a | * cos(a,b)为 a

2016-08-25 00:05:22 690

原创 LCA在线算法ST&&DFS->POJ1330&&POJ1470

LCA在线算法ST&&DFS:在线算法DFS+ST描述(思想是:将树看成一个无向图,u和v的公共祖先一定在u与v之间的最短路径上):(1)DFS:从树T的根开始,进行深度优先遍历(将树T看成一个无向图),并记录下每次到达的顶点。第一个的结点是root(T),每经过一条边都记录它的端点。由于每条边恰好经过2次,因此一共记录了2n-1个结点,用E[1, … , 2n-1]来表示。(2)计算R:用R[i]

2016-08-23 16:06:11 548

原创 Nim博弈->HDU1907

Nim博弈->HDU1907Nim博弈介绍:1.有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3

2016-08-22 21:36:18 512

原创 UVALive6908->线性DP

POJ2096->概率DP题意: 一个软件有s个子系统,会产生n种bug。 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中。 求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望。 PS:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s, 属于某种类型的概率是1/n。 题解:

2016-08-22 14:21:26 364

原创 威佐夫博弈->HDU1527

威佐夫博弈->HDU1527威佐夫博弈(Wythoff Game): 有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(

2016-08-21 12:59:49 348

原创 HDU1525->博弈论

HDU1525->博弈论题意: 两个人玩游戏,给出两个数字,每个人只能用大的数字减去小的数字的任意正整数倍,先把一个数减到0的人获胜,问谁最后获胜。题解: 记a > b, 如果输入中a和b中有一个是0,则先手直接获胜。 否则: 如果a%b == 0 , 则此时正在操作的人可以直接获胜; 如果a/b>=2,则此时正在玩游戏的人可以通过自己的操作决定必胜和必败。

2016-08-20 17:07:01 548

原创 HDU5091->线段树维护区间覆盖次数&&扫描线

HDU5091->线段树维护区间覆盖次数&&扫描线题意: 一个平面上有一些点,给出这些点的坐标,求用一个宽为w高为h的格子最多能包含到多少个点题解: 用一根平行于y轴的扫描线维护沿x轴方向的宽度,而沿y轴方向的点的个数的计算则可以等价为求一个区间内线段覆盖的最多次数。 由于已经给出高度h,所以每个点都可以看成是以这个点的y坐标为起始,长度为h的一条线段。 这里扫描线的运用,就是

2016-08-20 12:14:45 993

原创 UVA10440->贪心||DP

UVA10440->贪心||DP题意: 一些摆渡船运送汽车,给出往返需要的时间和每辆汽车到渡口的时间,每次最多能装几辆车,求所有汽车都到达对岸的最少次数和最短时间。题解: 毋庸置疑,所有汽车都到达对岸的最少次数就是汽车总数除以船每次能装的汽车的最多数量,然后向上取整。 时间的计算,每辆车可以是以自己的到达时间为起始时间来计算摆渡船这趟往返后到达渡口的时间;若是运输前一趟汽车后摆渡

2016-08-19 10:09:32 509

原创 HDU1024->线性DP

HDU1024->线性DP题意: 求一个有n个元素的序列,划分出m个子序列,求这m个子序列的最大和。题解: dp[i][j]代表前j个数选i个子序列,能得到的最大和。 决策为:第j个数,是在第包含在第i组里面,还是自己独立成组。 状态转移方程: dp[i][j]=max(dp[i][j-1]+num[j],dp[i-1][k]+num[j]) ; 由于采用二维数组,

2016-08-18 12:44:22 331

原创 POJ2096->概率DP

POJ2096->概率DP题意: 一个软件有s个子系统,会产生n种bug。 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中。 求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望。 PS:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s, 属于某种类型的概率是1/n。 题解:

2016-08-18 00:10:48 456

原创 HYSBZ1206->数位DP

HYSBZ1206->数位DP题意: 求一个区间中有多少个数其相邻两位之间的差值大于等于2,不含前导0,只有一位的数字也都算作符合规则。题解: 典型的数位DP的题目。 dp[i][j]代表第i位为j时,符合要求的数字有多少个。 先初始化,从第1位到第11位依次统计,状态转移方程为: dp[i][j] += dp[i-1][k] (k - j >= 2 || j - k >

2016-08-17 17:18:28 409

原创 HDU5094->BFS&&状态压缩

HDU5094->BFS&&状态压缩题意: 有一个迷宫,每个格子有四个方向,但这四个方向可能是门,可能是墙,也可能是通路,有些格子里有钥匙,每种钥匙只能开对应品种的门,求从(1,1)到(n,m)所花费的最少时间题解: 相比最基本的迷宫,这个题多了许多状态,因此我们在记录迷宫信息时不能再简单的只记录一张图,而是要记录每个格子的四个方向的状态以及每个格子有没有钥匙,有哪些钥匙。 在记录钥

2016-08-17 15:40:47 631

原创 FZU2150->BFS

FZU2150->BFS题意: 有一片草地,两个人同时放火烧草地,点燃一片草地后,火会向四周蔓延,求最少要多久能把所有草地都烧完题解: 先预处理,记录所有能放火的地点,然后把这些地点两两分别组合,通过BFS的方式判断是否能烧完草地,以及烧完草地要走多少步,最后选出最少的步数代码:#include <stdio.h>#include <iostream>#include <string

2016-08-17 10:52:10 312

原创 POJ1961->KMP

POJ1961->KMP题目大意: 给你一个字符串,求他之前大于1的循环节. 比如aabaabaabaab,长度为12.到第二个a时,a出现2次,输出2.到第二个b时,aab出现了2次,输出2.到第三个b时,aab出现3次,输出3.到第四个b时,aab出现4次,输出4题解: next数组的运用 KMP的前缀函数处理出来的前缀数组表示当当前字符失配后,要向前调到哪一个位置可以继续

2016-08-15 19:37:41 378

原创 UVA10128->线性DP

UVA10128->线性DP题意: 有n个身高不同的人排队,从队头能看见p个人,从队尾能看见q个人,求这些人有多少种不同的排列题解: 这道题可以用DP做,也可以用组合数学做,但是组合数学的做法比较不容易 这里介绍DP的思路: dp[i][j][k]代表队伍里现在一共有i个人,从队头看能看见j个人,从队尾看能看见k个人; 所有人从高到低开始入队,则进来的人可以选择站

2016-08-10 00:24:17 343

原创 UVA10006->素数筛&&快速幂取模

UVA10006->素数筛&&快速幂取模题意: 判断输入的数是否是Carmichael number 如果一个数n,比它小的所有数a^n%n=a,并且这个数不是质数,则称这个数是Carmichael number题解: 先用素数筛打表,每次先判断输入的数是不是质数,如果不是,再接着判断这个数是否符合费马定理,如果符合则该数为Carmichael number代码:#includ

2016-08-10 00:12:57 338

原创 最短路&&优先队列优化->HDU2544

最短路&&优先队列优化->HDU2544Dijkstra算法思想:    (1)在任意时刻,我们都要得到从源点到所有顶点的估算距离,并维持一个顶点集合S,若顶点v在S中,则说明从源点到v的最短路径已知;    (2)在每一次将不在S中的顶点v加到S中去时,总是选择从源点到v的估算距离最小的;    (3)顶点v加入S中之后,对于所有与v相邻的顶点(不属于S),更新它们的估算距

2016-08-09 00:43:39 654

原创 次小生成树->UVA10600

次小生成树->UVA10600次小生成树可由最小生成树换一条边得到算法: 1)先用prim求出最小生成树T,在prim的同时,用一个矩阵maxij[u][v]记录在树中连接u-v的路径中权值最大的边. 2)枚举所有不在T中的边u-v,加入边u-v,删除权值为maxij[u][v]的边,不断枚举找到次小生成树.模板:Prime1()用于求最小生成树,Prime2()用于求次小生成树。#

2016-08-08 22:39:39 355

原创 POJ2349->最小生成树

POJ2349->最小生成树题意: 要在n个节点之间建立通信网络,其中m个节点可以用卫星直接连接,剩下的节点都要用线路连接,求剩下这些线路中最大的长度需要多长题解: 明显还是最小生成树的题 如果用Prime算法,该算法现在V1集合中放入任意一个节点,然后每次选取和V1集合中的节点相连的最短的边的另一个节点加入到V1集合。 此时,可以把建成整棵最小生成树的所有边记录在一个数组

2016-08-07 23:52:51 1208 1

原创 POJ1751->最小生成树

POJ1751->最小生成树题意: 有n个城市,已知城市的坐标和已经被连通的城市编号,求能把所有城市都连接起来的最短路径的连通方法。题解: 很明显,这个题是要求一个图的最小生成树,不过要记录并输出路径。 在每次吧一个节点加入到V1集合的时候,记录下来这个节点的横纵坐标即可。代码:#include <stdio.h>#include <iostream>#include <str

2016-08-05 23:53:25 411

原创 POJ1258->最小生成树

题意: 给出一个各个节点之间权值的对应图,求这个图的最小生成树题解: Prime算法的裸题。代码:#include <stdio.h>#include <iostream>#include <string.h>#include <cmath>using namespace std ;#define INF 0x3f3f3f3f#define MAX 110int n ;b

2016-08-04 23:57:37 355

原创 最小生成树Prime->HDU1875

最小生成树Prime->HDU1875生成树: 无向图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树。若在生成树中任意增加一条边,将出现回路;减少一条边,则会使之成为非连通图。最小生成树(最小代价生成树): 对无向连通图的生成树,各边总和称为生成树的权,权最小的生成树称为最小生成树。最小生成树的Prime算法: Prime算法采用贪心的思想,先将图中的第一个节点加

2016-08-04 22:48:36 332

原创 拓扑排序->POJ2585

POJ2585 题意: 有一个4*4的显示器,上面可以出现9种2*2的图片,这些图片可以相互覆盖,问输入的图片可否由那九种图片堆叠出来题解 初始化基本信息,拓扑排序判断有无环出现代码:#include <stdio.h>#include <iostream>#include <string.h>#include <string>#include <queue>using na

2016-08-03 22:28:09 689

原创 Havel-Hakimi定理(判断一个序列是否可图)->POJ1659

Havel-Hakimi定理(判断一个序列是否可图)->POJ1659给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化 至于能不能根据这个序列构造一个图,就需要根据Havel-Hakimi定理中的方法来构图。可图化的判定: d1+d2+……dn=0(mod 2)。关于具体图的构造,我们可以简单地把奇数度

2016-08-02 00:14:22 1478

原创 KMP介绍->POJ3461

KMP算法介绍KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则返回-1(常用手段)。详解算法可以参考,写的非常详细: http://www.cnblogs.com/yjiyjige/p/3263858.html题意: 求一个

2016-08-01 02:13:17 271

LightFaceNet Model

Model of SqueezeFaceNet and MobileFaceNet. The full project at my github(https://github.com/SelinaFelton/LightFaceNet)

2018-08-04

Win32MFC计算器

实验课实现的win32MFC计算器,可实现+、-、*、/、sqrt、%运算,同时支持数字键盘输入,仅供参考学习,欢迎批评指正

2018-03-05

空空如也

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

TA关注的人

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