自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Miller_Rabin质数测试

//Miller_Rabin的复杂度为S * log n//注意快速幂中的取模n可能会乘法溢出bool Miller_Rabin(ll n){//其中n为要测试的数字 if(n <= 2){ if(n == 2)return true; else return false; } if(n % 2 == 0)return false; ll u = n - 1; while(!

2016-04-10 10:01:38 404

原创 莫队算法

莫队算法常用于处理不带修改的连续区间的询问问题上,一http://般来说都有以下这种形式:给你n(1e5左右)个数字A[i],再给你q(1e5左右)个询问,每个询问包含一个l和r,表示用某种操作,对原数组的A[l...r]进行操作,并求出值。一般来说,用莫队算法的情况下,我们已知A[l...r]的值,要转移到A[l'...r']的值需要花费为O((|l - l'| + |r

2016-01-26 10:37:18 630

原创 树链剖分

树链剖分就是把树上的链分成重链和轻链,然后在重链和轻链上进行求和、修改,求最大值,最小值等等。。。。树链剖分只是把找链这个环节优化到了log(n),具体的总的复杂度是多少,还要看你储存链的数据结构是什么。如果用的是线段树,那么复杂度大概是log(n) * log(n);如果用的是树套树,那么复杂度大概是log(n)*log(n)*log(n);如果是树链剖分加上树套树写区间第k大,那么

2015-11-29 13:25:55 391

原创 白书几何模板

/*白书几何模板*/const double eps = 1e-10;struct Point{ double x,y;//点的坐标类型自己定 Point(double x = 0,double y = 0):x(x),y(y){}};typedef Point Vector;//向量就是点的表示Vector operator + (Vector A,Vector B){

2015-11-26 17:26:30 369

原创 HDU5517 沈阳现场赛 二维树状数组

/*为b弄一个数组,存放最大的a的个数,vec[i]来存放a,c,d中的c,d以及a,c,d这个元素的元素然后从大到小枚举a(从小到大好像不可以,因为不知道是上一次a在二维树状中在x,y这个点放了一次还是当前枚举的a在x,y这个点放了一次)然后二维树状数组判断区域中有无点,再更新,搞定*/#include #define mem(a,b) memset(a,b,sizeof(a))

2015-11-19 22:21:05 389

原创 dfs序基本类型总结

大致看了下dfs序的题型,大致清楚了大致的解题思路。。。但是对于一些题目还是比较无力。。。。dfs序比较重要的性质:一棵子树的所有节点在dfs序里是连续一段,主要就是利用这个性质来解题题型一:对某个点X权值加上一个数W,查询某个子树X里所有点权值和。解:列出dfs序,实现修改一个数,查询一段序列的和,显然这个序列可以用树状数组维护。题型二:对X到Y的最短路上所有点权

2015-11-13 16:38:18 4589 2

原创 欧拉函数

/*欧拉函数:求1~n-1中与n互质的数的个数另外若gcd(i,n) == 1的花gcd(n - i,n) == 1*///直接求解欧拉函数int euler(int n){ //返回euler(n) int res=n,a=n; for(int i=2;i*i<=a;i++){ if(a%i==0){ res=res/i

2015-11-08 12:30:32 379

原创 CF 593D LCA,贪心

题目链接:http://codeforces.com/problemset/problem/593/D题意:给你一个含有n个点的树(2思路:对于询问a,b,找出其公共祖先,然后从任意一点出发向祖先走,走的过程中更新c值。因为边值要等于1,要么大于1。对于所有大于1的边,显然这种边最多走64次可以结束。对于等于1的边,向上递归到边值不为1的点,并把原来点的父亲直接标记到这个点

2015-11-06 15:56:16 321

原创 KMP算法

/*这是对失配函数没有优化的MP算法,最坏情况下也能达到O(m + n)的复杂度,其中m为模板串长度,n为文本串长度.此算法还可以计算模板串在文本中出现的次数(可重叠)*/char s[maxn],t[maxn];//s为文本,t为模板int f[maxn];//失配函数void getFail(char *P,int *f){ int m = strlen(P); f[0] =

2015-10-31 11:45:26 278

原创 后缀数组

char s[maxn];//构造字符串s的后缀数组,复杂度为o(nlogn)int sa[maxn],t[maxn],t2[maxn],c[maxn],n;//每个字符的值必须为0~m-1void build_sa(int m){ int i,*x = t,*y = t2,n = strlen(s); for(i = 0;i < m;i++)c[i] = 0; for(i = 0;i

2015-10-31 10:34:05 234

原创 二维树状数组

/*单点修改,查询的复杂度都为log(n) * log(n)*/int sum[maxn][maxn];int n;char c;inline int lowbit(int x){ return x & (-x);}//其中n为点的总数,向上更新树状数组void add(int x,int y,int val){ for(int i = x;i

2015-10-29 14:14:44 284

原创 FOJ 2204 dp

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2204我次奥。。。dp渣的要吐血了,这题想了挺久。。。题意:给出n(0 思路:dp方程是dp[i][j][k]表示用第i个颜色(0或1)放到第j个位置的话,从当前点往前有连续的k个i颜色的小球。然后枚举开头的同颜色的小球数目,看做是枚举了那么多小球后再用不同颜色的小球分开

2015-10-22 20:26:01 277

原创 在线LCA算法

先打个粗糙的模板,以后再来改精细http://hihocoder.com/problemset/solution/461416#include#define mem(a,b) memset(a,b,sizeof(a))#define FOR(i,a,b) for(int i = a;i <= b;i++)using namespace std;typed

2015-10-19 15:00:55 346

原创 CF 589F 网络流(or贪心?)

题目链接:http://codeforces.com/problemset/problem/589/F题意:有n盆菜,每个菜的上菜时间是ai-bi,要求每盆菜的品尝时间都相同,求最大的品尝时间。思路:一开始也想到了网络流,但是没有想到压缩区域。。。(我只想到一个点一个点地建图,这个的图点可能有10^4个啊。。肯定不能用网络流),后来请教别人可以一个区间建图,流量就是区间长度

2015-10-19 14:47:04 612

原创 CF 589G 树状数组

题目链接:http://codeforces.com/contest/589/problem/G好久没做过树状数组的了,也应该开始练练数据结构了题意:给你m个工作日,每个工作日有工作时间,给你n个员工,每个员工每天工作有准备工作时间和实际工作时间,每天实际工作时间之前必须做完准备工作时间,问这个员工最早要第几天完成思路:一开始的想法只想到把员工的准备工作时间从小到大排序,其他的

2015-10-19 14:37:21 509

原创 CF 552E 暴力

题目链接:http://codeforces.com/problemset/problem/552/E思路:观察一下就可以看出如果要加括号的话,那么这个括号一定是加在两个乘号之间的,题目上说乘号不超过15个,那么暴力枚举两个乘号模拟一下就行了,手法太烂。。。模拟写了挺久。。。#include #define mem(a,b) memset(a,b,sizeo

2015-10-05 11:21:33 1002

原创 CF 549G排序,构造

题目链接:http://codeforces.com/problemset/problem/549/G思路:可以将每个人的金钱看作是一个一个的方块,金钱分可分配金钱和不可分配金钱,不可分配金钱类似台阶。那么对于相邻两个人的交换,就相当于可分配金钱的方块在不可分配的金钱的方块上移动。那么对于最后的方案,只要将所有的可分配的金钱从小到大排序,然后检查能否组成非递减的金钱

2015-10-04 19:29:28 407

原创 CF 553B 构造

题目链接:http://codeforces.com/problemset/problem/553/B思路:方法较无脑,直接手动写几个式子,发现之可能两个相邻的数字交换,且交换的数字不能重叠。知道这个后,稍微想一下如果在当前串再加入数字的话总数目可以由上一个的数目和上上个的数目推出,类似fibonaci数列,那么直接推好了。。代码:{CSDN:CODE:11

2015-10-04 17:37:57 927

原创 中国剩余定理

中国剩余定理(CRT)的表述如下 设正整数两两互素,则同余方程组                               有整数解。并且在模下的解是唯一的,解为                                 其中,而为模的逆元。int CRT(int a[],int m[]

2015-09-17 10:50:16 257

原创 组合数中的Lucas定理

和,并且是素数,这个问题有个叫做Lucas的定理,定理描述是,如果 一般地,如果要求C(m,n) % M,其中M由n个不相同的质数p1 * p2 * p3 *.....* pn(pi

2015-09-17 10:40:04 278

原创 三分法

老是忘记,多备个模板,记住了之后删for(int it = 0;it <= 100;it++){//l,r为浮点数建议直接枚举二分次数,不然可能会精度误差造成死循环 double mid = l + (r - l) / 3.0; double midmid = r - (r - l) / 3.0; double mid_ans = cal(mid); double mi

2015-09-17 10:28:56 283

原创 CF 31E 分块,状态压缩

题目链接:http://codeforces.com/problemset/problem/31/E题意:输入一个n,给你2n个数字,有2个人,每个人从前往后分别从中选出n个数字,使得每个人的获得的数字的和最大(可能有前缀0,在得到的数字中前缀0舍去)。思路:将2n个数字从中间分成前后各n个数字这样的两段,分别对两段状态压缩求出每个状态的和,其中前面这段可以根据每个人拿且必

2015-09-10 10:19:11 315

原创 CF 163A dp

题目链接:http://codeforces.com/problemset/problem/163/A题意:告诉你一个字符串s,一个字符串t,让你从s中选出不同的子串x,从t中选出不同的子序列y(子串、子序列傻傻分不清的自行百度),总共有多少种组合使得x,y的内容相同。思路:粗略思考的话似乎除了dp就没有其他想法了把。dp[i][j]表示在s中以第i个字符结尾的子串,在t中

2015-09-09 18:58:44 337

原创 hdu5396 2015多校第九场 区间dp

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5396题意:给你n个数和n-1个操作符(2思路:看到n比较小。。。不是搜索就是区间dp。。。显然,搜索是n!种方案,算到量子计算机被研制出来都算不出来。。。那肯定区间dp了。。既然是dp,那么状态方程和转移明了了,这道题就可解了。。。设dp[i][j]为第i个数到第j个数的所

2015-08-19 09:42:01 615

原创 CF 549C 博弈

题目链接:http://codeforces.com/problemset/problem/549/C题意:给你n座城市,每个城市有ai个人。每次Stannis和Daenery选择一个城市并杀光城市里的所有人(从stannis开始),最后剩下k个城市时游戏结束。剩下的人数是奇数则Stannis赢,剩下的人是偶数是Daenery赢,假设每个人都按照最优策略取,那么问你是Stannis必赢

2015-08-18 10:16:48 427

原创 CF 514C hash,字典树

题目链接:http://codeforces.com/problemset/problem/514/C比较少碰到hash的题目,这个题目记录一下可以作为练手用。题意:给你n个字符串作为母串,m个字符串作为字串,其中(0 思路:因为字符串中只含有a,b,c,所以只要把a,b,c看作是1,2,3就可以了(不要看作0,1,2,不然aaaa跟aaa的hash值就相同了)

2015-08-16 20:56:24 441

原创 CF 515D 图,贪心

题目链接:http://codeforces.com/problemset/problem/515/D感觉是挺有意思的一道题目题意:给你一个n*m的矩阵,要求你用1*2的方格把这个矩阵给填满,其中格子是"*"号的格子不能填,如果不存在填法或者存在多种填法就输出"Not unique"。如果存在就输出填满后的矩阵,填充的方式如sample所示思路:对于相邻的两个"

2015-08-16 15:55:56 366

原创 hdu 5381 2015多校第八场 莫队算法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5381还没学过莫队算法。。。。网上也找不到莫队算法的论文,只能勉强看着别人的代码打下来。。。稍微介绍下莫队算法:能使用莫队算法的前提是这样的--如果我们已知[l,r]的答案,能在O(1)时间得到[l + 1,r]的答案以及[l,r - 1]的答案,即可使用莫队算法。时间复

2015-08-14 20:46:33 848

原创 CF 543B 图,最短路

题目链接:http://codeforces.com/problemset/problem/543/B题意:总共有n个点(1思路:看到点的个数比较少,可以先把所有i到j的最短路算出来,并用邻接矩阵存起来,O(n^2)复杂度。接下来只要考虑两种情况:1.s1到t1和s2到t2的路径中没有重合的边,那么只要单独算两条路径的最短路即可。2.从两条路径的一个端点出发,路径中会出现先

2015-08-10 16:37:25 744

原创 tarjan求点的双连通分量

hiho详解链接:http://hihocoder.com/contest/hiho55/problem/1点的双连通分量的定义:对于一个无向图的子图,当删除其中任意一个点后,不改变图内点的连通性,这样的子图叫做点的双连通子图。而当子图的边数达到最大时,叫做点的双连通分量。可以知道的是,桥一定是点的双连通分量。void pop_stack(int x)//边不断

2015-08-10 13:53:54 499

原创 tarjan算法求强连通分量

hiho详解链接:http://hihocoder.com/contest/hiho54/problem/1强连通分量的定义:对于有向图上的2个点a,b,若存在一条从a到b的路径,也存在一条从b到a的路径,那么称a,b是强连通的。对于有向图上的一个子图,若子图内任意点对(a,b)都是满足强连通,则称该子图为强连通子图。非强连通图有向图的极大强连通子图,称为强连通分量。特别的,任意一个和

2015-08-10 10:24:32 275

原创 tarjan算法(边的双连通分量)

hiho链接:http://hihocoder.com/contest/hiho53/problem/1边的双连通分量定义:对于一个无向图的子图,当删除其中任意一条边后,不改变图内点的连通性,这样的子图叫做边的双连通子图。而当子图的边数达到最大时,叫做边的双连通分量。显而易见的是,这种双连通分量其实就是把原图中的桥给删去后的子图,每一个联通块都是一个双连通分

2015-08-09 18:05:06 2684 1

原创 tarjan算法求联通块中求割点和割边

来自hiho的第五十二周,参考链接:http://hihocoder.com/contest/hiho52/problem/1//tarjan中可见dfs_pos,low数组不需要初始化//如果有多个联通分块,那么就要枚举每个未访问过的点进行tarjan,进行tarjan前先将fa[i] = -1//这里的se为set,存放割点;edge为vector >,存放割边void ta

2015-08-09 15:28:24 443

原创 CF 557C 暴力

题目链接:http://codeforces.com/problemset/problem/557/C题意:给你个n个脚的桌子(1 思路:一看到看到di只有200感觉就可以暴力记录着来做。将li相同的放进同一个vector,然后记录一个sum[i],表示从长度为0的到长度为i的所有桌脚的长度和。然后枚举桌脚长度i,枚举到这个长度i,说明大于i的桌脚都要砍掉,那么当前耗费加上

2015-08-09 13:18:14 1022

原创 CF 558C 暴力,bfs

题目链接:http://codeforces.com/problemset/problem/558/C题意:给你n个数(1 越来越不行了,div2的c题都半天做不出来。。。思路:对于每个数暴力bfs。。。求出这个数所能够到达的所有的数,对于目的数,加上这个数到他的操作数(这个操作肯定是原数到目的数的最小操作),对于每个到达的数cnt都+1,最后判断那些cnt==n的数和

2015-08-08 18:03:54 1105

原创 CF 513C 期望,概率

题目链接:http://codeforces.com/problemset/problem/513/C题意:有n个公司,他们要竞标一个广告位,他们出的钱的金额在L[i]到R[i]之间,问你所有公司所出的钱中第二高的金额的期望值。(2 目前碰到概率和期望的题目简直毫无思路啊。。。现在的能力只能去硬着头皮看题解(感觉能彻懂题解都不错了。。)解法(参考tourist的

2015-08-08 14:12:09 330

原创 java大数模板

java大数的头文件:import java.math.BigDecimal; import java.util.Scanner; import java.math.BigInteger; 大致模板:import java.math.BigDecimal; import java.util.Scanner; import java.math.BigInteger;

2015-08-05 21:30:04 1254

原创 hdu5352 2015多校第5场 网络流(或二分图)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5352题意:有N个城市,一开始都处于被地震摧毁的状态。之后有M个询问,1 x表示可以将与x相连(包括x)的城市重建(重建后不再被地震破坏),每次能重建的城市的数量小于等于k;2 x y表示在x和y之间建立一条道路相同;3 p x1 y1...xp yp表示有p组道路被破坏,分别是x1 y1.

2015-08-05 20:50:44 603

原创 高斯消元模板(+解异或方程组)

原题链接是hiho第56周:http://hihocoder.com/contest/hiho56/problem/1用来练手高斯消元,该模板只能判断无解,多解(不能判断有几个自由变元)和小数解的情况(可以用强制转换变成整数)//其中a为方程组等号左边的矩阵,b为原方程组右边的值,temp为辅助数组,val为答案,代表等号左边xi的值double a[maxn * 2][maxn];/

2015-08-03 10:42:41 733

原创 CF 550C 数学 or dp

链接:http://codeforces.com/problemset/problem/550/C题意:给你一个长度最大为100的整数,问你能不能去掉这个整数里面的数字,使去掉后的整数能被8整除。思路:题解的数学方法:一个数要是能被8整除,只要后面三位能被8整除就可以了。因为一个数总可以写成num =...... 1000 * x + 100 * y + 10 * z + t的

2015-08-02 15:15:33 336

空空如也

空空如也

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

TA关注的人

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