自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Floyd判圈算法

给你一个链表,要你判断这个链表中是否有环并求出环的长度(如果有环)。遇上这样的问题,暴力是过不了的,这时我们就可以用上Floyd判圈算法。 Floyd算法,又称龟兔赛跑算法,是著名的判圈算法,中心思想是假设有两个小孩同时从一个跑道的起点出发向前跑,其中一个的速度是另一个的两倍,那么,如果路是一条直线,则跑得快的小孩应先到达终点,如果路上存在环,则跑得快的小孩最终会与跑得慢的小孩相遇。 ...

2018-04-21 14:13:00 418

原创 【POJ3126】Prime Path(预处理+BFS)

题面:【POJ3126】Prime Path这道题目要在解决问题之前先预处理出一个四位数的质数表,由于范围很小,只需要枚举1000~9999并用O(√n)的质数判断函数进行验证即可,当然,用线性筛或除余法也是可以的(此题时间充裕,不建议用MR素数判断)。然后便是一个BFS,对于当前数字,只要枚举每一个它能变成的质数,判断是否已操作过,若未操作过则将其加入队列即可。代码如下:#in...

2018-04-21 13:15:01 329

原创 【POJ2531】Network Saboteur(一道无需优化的DFS)

题面:【POJ2531】Network Saboteur可以说,这道题是一道无需优化的DFS,由于N最大只有20,连O(2^n)的复杂度都能过,因此,只需要DFS枚举每一个节点分配到哪一个子集即可。因此就能得出代码:#include<cstdio>#include<algorithm>#include<iostream>#include&lt...

2018-04-21 12:57:12 1078

原创 【POJ2251】Dungeon Master(三维BFS)

题面:【POJ2251】Dungeon Master这是一道很有意思的题目,平时我们所接触的BFS大多是二维的,可这题不一样,这题是一道三维BFS!!!这题不需要多讲,直接上代码就可以了:#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#...

2018-04-14 14:39:53 273

原创 【POJ3253】Fence Repair(合并果子的翻版)

题面:【POJ3253】Fence Repair考虑到每一次切割所花费的代价是所切割的木板的长度,那我们就可以反向思考,合并两块木板所花费的代价是这两块木板的长度和,那么问题就转化为了将输入中给出的N块木板给两两合并在一起。于是,我们会惊奇地发现这道题其实就是合并果子的翻版,一道用小根堆来优化的贪心题!当然了,手打堆是比较麻烦的,相比之下,C++自带的优先队列就好用多了。代码见下:#...

2018-04-14 13:50:56 243

原创 分治(二)——三分法学习笔记

当答案具有可二分性时,我们可以用二分答案来解决。但是,如果要求出凸性函数或凹性函数的最值时,二分就毫无用武之地了,这时,我们就可以用三分法来求出答案。 一个凸性序列/凹性序列通俗的说法就是在该序列最大值/最小值的左边满足不严格单调递增/递减,右边满足不严格单调递减/递增。如1,2,3,6,4是一个凸性序列,而5,4,4,3,1,2,4,6是一个凹性序列(见下图),而图中的6和1就分别是两个序列...

2018-04-14 12:24:44 6101

原创 分治(一)——二分法:二分查找+二分答案

二分是一个常用的小技巧,可以将原本O(n)的复杂度降为O(log n)。但是二分也有局限性,只能在一个单调有序的集合中使用,所以,对于一道题目,我们要先判断它是否具有可二分性,然后再进行二分。一、二分查找1.1 思路在一个不严格单调的有序集合中,我们如果要查找一个元素的位置,可以用l来存储下界,用r来存储上界,然后将整个集合分成两半,通过对集合中间元素与目标元素的比较,来判断目标元素是...

2018-04-14 11:25:14 1757

原创 【POJ3122】Pie(二分)

题面:【POJ3122】Pie按理来说,这题应该是一道很水的二分题,可是精度问题却折磨了我很久很久,经过无数次的修改,我总算A了这一题。你可以二分最终每个人所能得到的Pie的大小,而验证函数check()其实也非常简单:bool check(double x)//验证函数{ int t=0;//记录当Pie的大小为x时所能得到的Pie的数量 for(int i=1;i<=...

2018-04-14 09:46:34 656

原创 筛素数方法(三)——除余法

当你要筛选出2~n之间的质数时,除了线性筛、MR素数判断等方法以外,还有一种叫做除余法的算法。  除余法的优点            时间复杂度:O((n√n)/3)    空间复杂度:较低               筛出2~n之间的素数比较暴力的方法,自然就是暴力枚举加上O(√n)判断,代码如下:#include<bits/stdc++.h>usin...

2018-04-12 18:07:39 2892 1

原创 【POJ1159】Palindrome(动态规划)

题面:【POJ1159】Palindrome这道题是一道较水的DP题。我们可以用f[i][j]来表示把[i..j]这个区间变成一个回文串所需添加的最少字母数,这样我们就可以轻松地得到状态转移方程:当s[i]==s[j]时,f[i][j]=min{f[i+1][j-1],f[i+1][j]+1,f[i][j-1]+1};当s[i]!=s[j]时,f[i][j]=min{f[i+1][j]...

2018-04-07 15:04:27 780

原创 【POJ1080】Human Gene Functions(动态规划)

题面:【POJ1080】Human Gene Functions这道题目一看就能想到用DP来做。首先,先把题中的表格放在一个函数中:int s(char x,char y){ if(x=='A') { if(y=='A') return 5; if(y=='C') return -1; if(y=='G') return -2; if(y=='T') retur...

2018-04-07 13:52:16 415

原创 位运算相关(二)——位运算的简单变换操作

序言  什么是位运算请自行参考位运算相关(一)——位运算学习笔记一、对末位的操作(1)去掉末位——x>>1(2)增加末位——增加0:x<<1,增加1:x<<1|1(3)改变末位——改成0:(x|1)-1,改成1:x|1,取反:x^1二、对右数第k位的操作(1)改成0:x&~(1<<k-1)(2)改成1:x|(1...

2018-04-07 10:32:01 522

原创 位运算相关(一)——位运算学习笔记

位运算,是程序设计的一个重要领域,将数字转化为二进制之后再按位进行运算,效率高,是编程的一个重点知识。一、&(与运算)1.1 概念与运算的运算符为&。当两个数进行与运算时,将其二进制进行操作,对于每一位,只有两个数这一位的值都是1,它的值才为1,否则为0。也就是说,1&1=1,1&0=0,0&1=0,0&0=0。1.2 举例以11...

2018-04-07 10:03:42 629 1

原创 快速幂算法详解

注明:本文中的x^y表示x的y次方当你要求n^m模k的值时,你应该用什么算法来做呢?一、O(m)朴素算法最简单的方法,便是朴素的模拟,这里就不多加介绍了,代码见下:#include<bits/stdc++.h>#define LL long long using namespace std;LL n,m,k;int main(){ scanf("%...

2018-04-04 17:24:01 1606

空空如也

空空如也

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

TA关注的人

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