- 博客(30)
- 资源 (1)
- 收藏
- 关注

原创 更换博客
其实此博客已经很久没有更新了,像我这种有强迫症比较喜欢折腾的人,就是不习惯那么长的域名(—_—) sunshine-cfbsl.com
2017-01-15 18:47:15
585
2

原创 来写一波402博客地址(纯粹东搞西搞)
来乱扯一波。男孩喜欢上了一个女孩。 男孩是交了择校费进来的,可是那个女孩的成绩很优秀。 男孩费劲一切努力引起女孩的注意。 开学一星期后,他顶着染黄做了造型的头发大摇大摆进了教室,秃头班主任张大了嘴巴。 全班同学哄堂大笑,看着秃头班主任的反应,男孩却只望着女孩。 女孩没抬头,静静地坐在座位上做题。 后来,男孩总是在课上怪声怪气的接老师的话,课间在座位上放大音量讲昨天他和谁打架,因为在厕所抽
2016-09-12 22:15:07
1385
1
原创 各种LCA的模板
好久没有写博客了,联赛前一天来写一点关于LCA的各种模板 极力推荐第四种方法1.Sparce_Table 算法把树按照DFS序重新编号并求出DFS序列后,利用序列中两点编号之间的最小值即为LCA的性质,通过RMQ求解。 代码如下:/*ID: Sunshine_cfbslLANG: C++PROG: LCA*/#include<cstdio>#include<cmath>#incl
2016-11-18 15:07:01
2291
1
原创 一些总结(10-3)
开学后考试一直连连犯低级错误,难题不会做,简单题又做错。。。 该做一些总结了(@_@)关于今天的考试:对于第一题的难度花的时间太多了。本来是一个简单题,方法也是对的,但是在求lcm时忘记了先除后乘,导致过样例时炸了long long,调试了很久之后,以为要用高精度。。。就去做第二题了。。第二题因为是字符串处理,写暴力写了太久,而第一题浪费了太多时间,调好暴力以后,认为没有时间再去想正解了,于是
2016-10-03 18:05:06
502
2
原创 SGU105 Div 3
水题。。。 题目大意: 给出如下序列: 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789, 12345678910, 1234567891011… 求出前n(1≤n≤231−1)(1\le n \le 2^{31}-1)个数中,三的倍数有几个。直接上代码:/*ID: Sunshine_cfbslLANG: C++
2016-09-28 20:07:54
575
原创 SGU104 Little shop of flowers
好久没有做SGU了,今天来刷一道。题目大意: 有V个花瓶(1≤V≤100)(1\le V \le 100),有F束花(1≤F≤100)(1\le F \le 100),且F≤VF\le V,现在要把所有的花放进V个花瓶中,且每个花瓶中只能放一束花,花必须按照编号由小到大的顺序放在花瓶中。也就是说∀i<j\forall i \lt j,都有花瓶i中的花的编号小于花瓶j中的花的编号。每一束花放在不同的
2016-09-28 14:08:55
488
原创 线性模方程求解
对于一些数论专题总是有些晕,还是要多做题(O_O)所谓线性模方程,就是形如ax≡b(modn) (a,x,b,n∈Z∗)ax\equiv b \pmod n\ (a,x,b,n\in Z^*)的方程。。已知a,b,需要求解最小的x值。方法如下:原方程等价于ax−ny=bax-ny = b ,令d=gcd(a,n)d = gcd(a, n)。如果bmodd≠0b \mod d \neq 0,则方程无解
2016-09-18 13:20:47
1363
原创 POJ1811 Prime Test (Pollard-Rho算法)
显然,这么大的数据不能用朴素算法过。 需要用到一种叫做Pollard-Rho的算法。 Pollard-Rho算法戳这里看懂了就变成了裸题。。。 直接上代码:#include<cstdio>#include<algorithm>#include<vector>using namespace std;const int MAXN = 65;long long x[MAXN], ans;lo
2016-09-12 20:53:16
771
原创 质因数分解的一些讨论(Pollard-Rho算法)
一类问题:对于一个整数n,将n进行质因数分解算法1:根据定义直接枚举,直接给出代码:void Decom(int n) { int i; vector<int> res; for(i = 2; i <= n; i++) { while(n%i == 0) { res.push_back(i); n /= i;
2016-09-12 13:34:07
7337
原创 素数判定的一些讨论(Miller-Rabin算法)
很久没有写博客了。。。最近军训加开学,感觉刷题速度有降低,要补一补。回归正题,正式进入数论阶段,讨论一下关于素数判定的那些事。一类问题: 判定一个整数n(n>1)是否为素数。算法1:直接根据素数的定义枚举ii从22到(n−1)(n-1),如果n%i==0nn为合数。 时间复杂度:O(n)O(n)bool is_prime(int n) { int i;
2016-09-03 22:08:50
4168
转载 位运算入门应用以及技巧
转自zyh大神,对于不太理解位运算的童鞋有很大的帮助(⊙o⊙) 原文戳这里位运算是信息奥赛中重要的一部分,由于位运算的速度比一般运算快,掌握了位运算,就能够在程序编写时更加灵活,提高程序效率,对解题有十分重要的帮助。 位运算的所有操作都是建立在二进制位上的,所以在学习位运算之前,请保证熟悉了二进制的基本运算法则以及基本的逻辑与、或、非运算。位运算基本操作1、左移操作 <<左移操作可以将二进制数a
2016-08-18 20:57:03
1797
原创 POJ3580 SuperMemo (Splay Tree的各种操作)
这题基本上就是SplaySplay TreeTree维护区间的终极题了。 AC后就能领悟到SplaySplay TreeTree的真谛(O_O) Splay Tree模板戳这里 题目大意: 对于一个数列{A1,A2,...,An}\{A_1,A_2,...,A_n\},写一个程序能够实现以下操作:ADD x y D:给数列{Ax,...,Ay}\{A_x,...,A_y\}中的每一个数都增
2016-08-17 21:05:12
650
原创 HNOI2010 bounce 弹飞绵羊 (BZOJ2002)
LinkLink-CutCut TreesTrees 裸题。。。(Link-Cut Trees 戳这里) 若可以从i弹到j则连一条从j到i的边,若弹飞了,则连一条从0到i的边。。。 然后就是这样。。。 代码如下:/*ID: Sunshine_cfbslLANG: C++*/#include<cstdio>#include<cstring>#include<algorithm>#i
2016-08-16 11:01:20
662
原创 动态树之Link-Cut Trees
关于动态树动态树(DynamicDynamic TreesTrees)问题, 即要求我们维护一个由若干棵子结点无序的有根树组成的森林。 要求这个数据结构支持对树的分割,合并,对某个点到它的根的路径的某些操作, 以及对某个点的子树进行的某些操作。(来源——QTREE解法的一些研究byYangZhe)解决动态树问题有很多种方法 ,这里介绍LinkLink-CutCut TreesTrees,它不能够实现
2016-08-13 15:03:33
927
原创 POJ2352 Stars(树状数组 or SplayTree)
发现网上并没有这一题的Splay做法。。。SplayTree模板点这里 其实是水题,所以不做讲解。 这里只是来贡献代码。。。树状数组:/*ID: Sunshine_cfbslLANG: C++*/#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;int
2016-08-13 09:51:14
412
原创 后缀数组之倍增算法
后缀数组是后缀树的替代品。它不仅时间效率高,而且代码比较简单,不易写错。 后缀数组可以查询模板串P[0...m−1]P[0...m-1],是否为文本串s[0...n−1]s[0...n-1]的子串,并在n很大,查询次数多时效率很高。 我们定义:后缀k:后缀s[k…n-1]k前缀:对于字符串u,u的前k个字符组成的字符串(k过大即为整个u)后缀数组(sa[i]):对所有后缀排序之后排名第i(
2016-08-12 11:52:33
2523
原创 Manacher算法
这个算法在书上见的少,但在做题时处理字符串(尤其时回文串)时,还是一种十分优秀的算法。Manacher算法可以在O(n)O(n)时间复杂度之内求出字符串s的最长回文子串。 定义: p[i]:以s[i]为中心的最长回文子串,从s[i]向右延伸多长 我们先对每两个字符之间(包括开头和结尾)加入一个没出现过的字符(这里以%为例): 原串:waabwswfd 新串:%w%a%a%b%w%s%
2016-08-11 21:34:27
348
原创 主席树
据说这个数据结构是主席(OrzOrz)在不会写划分树的情况下自己写的一个替代品。。。 然后应该叫做函数式线段树。。。 却被叫成了这么一个高大上的名字。。。主席树是一种能够查询区间的第k大数(和划分树一样)的离线数据结构。思路是对于每一个区间[1,p][1,p]构造一颗线段树。先对所有数字离散化,然后如果有n个数,则线段树维护[1,n]范围内出现的数的个数。对于区间[a,b][a, b]线段树[1
2016-08-11 19:23:31
536
原创 树套树之线段树套平衡树(ZOJ2112 Dynamic Rankings)
接上篇:树套树之线段树套线段树 树套树都应该是做一道题就会了的。。 Dynamic Rankings(ZOJ 2112) 题目描述: 某公司开发了一种新型的计算机,它不再仅能找到给定N个数中第k小的数。它变成了一个更强大的系统。对于N个数a[1],a[2],…,a[N],你可以询问a[i],a[i+1],…,a[j-1],a[j]中第k小的数(i≤j,0<k≤j+i−1i\le j,0\lt
2016-08-11 17:10:26
1127
原创 树套树之线段树套线段树(POJ2155 Matrix)
表示知道线段树的人做一道二维线段树就应当会了。。。 所以这里直接给出例题。Matrix(POJ 2155) 题目传送门 题目描述: 给出一个N*N的矩阵A, 它的元素都是0或1,A[i,j]表示第i行第j列的数字。开始时,A[i,j]均为0(1<=i,j<=N)。我们可以对它进行以下两种操作: 1.C x1 y1 x2 y2(1<=x1<=x2<=N,1<=y1<=y2<=N)改变以(x1,
2016-08-11 17:01:03
2155
原创 Lucas定理与扩展Lucas
之前看了乘法逆元(详见除法取模与逆元),发现不能处理不互质的情况,于是去找方法,最后找到了Lucas定理。。。 虽然与期待中的不一样,但是还是非常有用的。(1)Lucas定理:若p为素数,则有: Cnm≡∏i=0kCnimi(modp)C_m^n \equiv \prod_{i=0}^kC_{m_i}^{n_i} \pmod p n=nkpk+nk−1pk−1+...+n0n = n_kp^k
2016-08-10 21:49:32
2983
3
原创 静态 Splay Tree 模板
复习一下Splay,没想到一个简单的模板写了一个多小时。。。注:该模板比较短,所以可能会有些难以理解。该结构体包含插入与查询操作。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 100010;struct Splay_Tree { int fa[MAXN]
2016-08-09 20:27:07
1021
原创 除法取模与逆元
我们经常在做题时会看到这样一句话:由于答案较大,请输出答案mod m的结果。(其中m一般为一个大质数) 我们经常会使用以下几个等式: (a+b)≡(amodm+bmodm)(modm)(a+b)\equiv (a\mod m + b\mod m) \pmod m (a−b)≡(amodm−bmodm+m)(modm)(a>b)(a-b)\equiv (a\mod m - b\mod m + m
2016-08-09 19:27:14
1921
原创 SPOJ00375 Query on a tree 树链剖分
题目大意: 给你一棵n个节点的树,实现以下两种查询: 1.CHANGE i ti : 将第i条边的权值更改为ti 2.QUERY a b : 询问节点a到节点b路径上最大的边权树链剖分的水题,树链剖分详见:传送门 这里注意由于存在更改操作,需要增加一个数组map[i]表示第i条边在线段树中的位置。 代码如下:/*ID: Sunshine_cfbslPROG: SPOJ00375LAN
2016-08-08 17:07:31
537
原创 树链剖分
我们有时候需要一种方法快速地求出树上任意两点之间路径的权值和(或者路径上边权的最大最小值)。这时,我们就可以用到树链剖分。所谓树链剖分,就是将一棵树分为许多条链,然后将这些链连起来,用线段树来维护区间的和(或者最大最小值)。 下面定义几个术语及数组:size[i]:以i为根结点的子树的节点个数 son[i]:i的子节点中size最大的子节点编号(若不存在则为-1) 重儿子:son[i]即为i的
2016-08-08 16:58:31
776
原创 SGU103 Traffic Lights
题目大意: 一个城市的交通系统可以由一些节点和道路来表示。两个节点之间最多存在一条道路,且不存在道路起点与终点相同。每一条道路都是双向的。在每一个节点由一个交通信号灯,它只有蓝色和紫色两种颜色,并且周期性的变换,两种颜色的周期长短可能不同。我们称一条道路可通行当且仅当离开起始节点时这条道路两端节点上的信号灯颜色相同。你可以选择在一个节点停留,求从起点到终点的最小耗时。 一道
2016-08-06 22:47:10
510
原创 SGU102 Coprimes
题目大意: 给出一个正整数N(1<=N<=10^4),求出不大于N并且和N互质的所有正整数的个数。 又是水题。。。枚举N范围内的所有正整数,通过gcd来算出两数是否互质,若不互质,把它的倍数全部筛掉,若互质,统计一下就可以了。 代码如下:/*ID: Sunshine_cfbslLANG: C++*/#include<cstdio>#include<
2016-08-06 22:20:52
444
原创 SGU101 Domino
题目大意: 给出n张多米诺骨牌,每张骨牌都由前后两个0到6的数字组成(1 ≤ N ≤ 100)。要求相邻两张多米诺骨牌接触的一边必须数值相同,给出一种将n张骨牌依次摆放的方法。这道题开始时想错了,把每一张骨牌当作一个点来做的。。。后来写着写着发现不行了。。。正解:把每一个数值当作一个节点,每一块骨牌当作一条边(要记录一下正反边),然后再走一遍欧拉路径就可以了,基本上就是水题。。。直
2016-08-06 22:08:11
637
原创 SGU100 A+B
好像几乎每一个题库的第一题都是A+B……#include<cstdio>#include<iostream>using namespace std;int main() { int a, b; cin >> a >> b; cout << a + b << endl; return 0;}
2016-08-06 21:54:54
444
原创 NOIP2004石子合并(环形DP + 四边形不等式优化)
经典的环形Dp问题,定义dp[i][j]为将第i堆到第j堆石子全部合并后所用的最小花费。则有如下状态转移方程: dp[i][j]=min(dp[i][j],dp[i][k−1]+dp[k][j]+w[i][j])(k∈(i,j])dp[i][j] = min(dp[i][j], dp[i][k-1]+dp[k][j]+w[i][j]) (k\in(i,j]) 通过四边形不等式优化以后,可转化为
2016-08-06 16:25:14
779
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人