- 博客(138)
- 收藏
- 关注
原创 后缀数组
#include<bits/stdc++.h>using namespace std;const int maxn=1e6+100;char s[maxn];int y[maxn],x[maxn],c[maxn],sa[maxn],rk[maxn],height[maxn],wt[30];int n,m;void get_SA(){ for (int i=1;...
2019-07-06 19:53:59
179
原创 ac自动机 模板
/*洛谷 p3796题意:n个模式串 一个文本串 问这个n个模式串最多的一个或者多个出现在文本串里的个数 顺便输出这个最多的文本串 */ #include<bits/stdc++.h>using namespace std;const int N=5e5+1000;int ans[N*10];char s[N*10];struct tire{ int sz=0...
2019-07-05 10:39:55
211
原创 再写ac自动机
/*洛谷 p3808 */ #include<bits/stdc++.h>using namespace std;const int N=5e5+1000;struct tire{ int c[N][26],val[N],fail[N],cnt; //字典树 void Insert(char *s){ int len=strlen(s);int now=0;...
2019-07-04 22:31:35
190
原创 分块
题目链接题意:就是单点更新 区间查询最小值线段树做法:#include<bits/stdc++.h>using namespace std;const int N=1e5+100;typedef long long LL;LL tree[N<<2];const int inf=0x3f3f3f3f; void build(int l,int r,i...
2019-07-04 19:50:45
218
原创 fget file
/*https://www.runoob.com/cprogramming/c-file-io.html*/#include<bits/stdc++.h>using namespace std;int main(){ char s[100]; fgets(s,100,stdin); int len=strlen(s); cout<&l...
2019-06-25 14:14:44
273
原创 二分图匹配()
跑最大流dinic O((nsqrt(m))) 匈牙利算法 O (nm)学习的博客:https://blog.youkuaiyun.com/dark_scope/article/details/8880547匈牙利算法bool dfs(int x){ for(int i=1;i<=m;i++){ if(!vis[i]&&mp[x][i]){//如果以...
2019-06-20 15:41:04
174
原创 线段树维护---区间的平方值和
/*https://ac.nowcoder.com/acm/contest/917/J线段树维护区间的每个平方和 */#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e5+100;LL tree1[N<<2],tree2[N<<...
2019-06-20 11:19:44
1174
原创 区间dp
一.什么是区间dp?顾名思义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dp算法。二.核心思路既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。所以在代码实现上,我可以枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),内层枚举该...
2019-06-18 21:43:18
554
原创 建立一棵二叉树 输出前序
/*洛谷 p1305输入一串二叉树,用遍历前序打出。第一行为二叉树的节点数n。(n \leq 26n≤26)后面n行,每一个字母为节点,后两个字母分别为其左右儿子。空节点用*表示6abcbdicj*d**i**j** 输出:abdicj思路:建立一个节点包含父节点 左儿子 右儿子 的节点(有父节点可以判断谁是根结点) */#include<bits/stdc...
2019-06-18 18:59:48
781
原创 划分树
划分树,类似线段树,主要用于求解某个区间的第k 大元素(时间复杂度log(n)),快排本也可以快速找出,但快排会改变原序列,所以每求一次都得恢复序列。 下面就以POJ 2104进行解说: 题目意思就是,给你n 个数的原序列,有m 次询问,每次询问给出l、r、k,求原序列l 到r 之间第k 大的数。n范围10万,m范围5千,这道题用快排也可以过,快排过的时间复杂度n*m,而划分树是m...
2019-06-17 13:09:48
309
原创 线段树(最小值)+01背包
/*https://ac.nowcoder.com/acm/contest/917/E题意:离子炮有n个操作信号,第i个操作信号的强度为b[i]。总体强度为各操作信号的强度之和。由于有些信号太弱了了 (强度<0)。 有 m位队友,第i位队友只会删除编号在 L[i] 和 R[i]之间的信号,且每删除一个信号,花费 C[i]格能量。飞船一共有 k格能量,问他在请队友删除完信号后,总...
2019-06-15 22:43:08
267
原创 l~r区间查找等于k的数有多少个(主席树)
/*https://ac.nowcoder.com/acm/contest/917/Hn个数 m个询问(m,n<1e4) 这个n个数是大于等于0的 询问l --- r有多少等于k的值题解:可以把a[i]当成下标 i当成数组 */#include<bits/stdc++.h>using namespace std;const int N=1e5+100;...
2019-06-15 20:31:41
1286
原创 树的分治
我们先随意指定一个根rt,将这棵树转化成有根树不难发现树上的路径分为两类,经过根节点rt的路径和包含于rt的某棵子树里(不经过rt)的对于前者, 我们用dis[u]dis[u]表示结点uu到根节点rtrt的路径长度, 则u到v的路径长即为dis[u]+dis[v]dis[u]+dis[v]对于后者, 既然uu到vv的路径包含在rtrt的某个子树内, 那么我们就找到这棵子树的根,再对他...
2019-06-14 15:57:46
270
原创 树的重心
/*poj 1655 题意:求树的重心和去掉重心的最大子树树的重心定义:对于一个树中节点x,当我们删去它时会将原来的树分割成若干个不相连的部分,其中每个部分都是一颗子树。设max_part表示这些部分中最大的一棵子树,若删去节点x能够使得max_part最小,则称这个点为树的重心 树的重心的性质:定义1:找到一个点,删除它得到的森林中最大的子树节点数最少,那么这个点就是这棵树...
2019-06-14 10:50:59
332
原创 树的直径
/*poj 1985题意:一棵树n个点 m个边(有边值) 求最长的路径树的直径:定义:树上任意俩点的距离最大值方法:俩次bfs 任意一点找到最远的点u。在找离u最远的点v 既u->v即是直径 */#include<cstdio>#include<cmath>#include<algorithm>#include<st...
2019-06-12 17:28:58
285
原创 矩阵加速(数列)
P1962 斐波那契数列题目背景大家都知道,斐波那契数列是满足如下性质的一个数列:• f(1) = 1• f(2) = 1• f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)题目描述请你求出 f(n) mod 1000000007 的值。输入输出格式输入格式:·第 1 行:一个整数 n输出格式:第 1 行...
2019-06-11 16:03:59
422
原创 P4783 【模板】矩阵求逆
设A是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵B,使得:AB=BA=E,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。注意矩阵和行列式是不一样的 行列式是可以计算的/*落谷:p4783求一个N\times NN×N的矩阵的逆矩阵。答案对10^9+7取模。 */#include<bits/stdc++.h>u...
2019-06-11 13:38:34
271
原创 P3390 【模板】矩阵快速幂
/*落谷:p3390给定n*n的矩阵A,求A^k %p */#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=110;const LL mod=1e9+7;LL n,p;struct node{ LL m[N][N]; friend node operato...
2019-06-10 13:21:42
217
原创 P3389 【模板】高斯消元法
/*落谷:p3389给定一个线性方程组,对其求解 */ #include<bits/stdc++.h>using namespace std;const double eps=1e-8;double a[110][110];int n;void Gauss(){ for(int i=1;i<=n;i++){//枚举列 int maxn=i; fo...
2019-06-10 12:14:10
178
原创 P3811 【模板】乘法逆元
1.乘法逆元(在维基百科中也叫倒数,当然是 mod p后的,其实就是倒数不是吗?):如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x。2.费马小定理(定义来自维基百科):假如a是一个整数,p是一个质数,那么是p的倍数,可以表示为如果a不是p的倍数,这个定理也可以写成3.扩展欧几里得(定义来自维基百科):已...
2019-06-09 16:15:22
663
原创 fft解决多项式相乘
http://uoj.ac/problem/34#include<bits/stdc++.h>#define N 262145#define pi acos(-1)using namespace std;typedef complex<double> E;int R[N];E a[N],b[N];int lenth=1,Reverse[N];inli...
2019-06-06 17:29:43
618
原创 复数std::complex
complex是个类模板,它可以采用float、double和long double 3种原始类型进行定制complex同时支持如下操作符:+-*/=+=-=*=/===!= 函数 含义 real() 返回复数的实部 imag() ...
2019-06-06 16:04:03
4701
1
原创 Polya定理
https://blog.youkuaiyun.com/WhereIsHeroFrom/article/details/79631703
2019-06-05 20:46:32
316
原创 P3385 【模板】负环
/*p3385题意:判断一个图里是否有负环题解:spfa是最短路算法.如果一个环上的边权有负的,我们可以重复走这条路来获得更小的边权,所以这可以作为我们使用spfa判断负环的根据 */#include<bits/stdc++.h>using namespace std;const int N=1e4+10;const int inf=0x3f3f3f3f;...
2019-06-05 19:04:48
327
原创 缩点
缩点,就是把一张有向有环图中的环缩成一个个点,形成一个有向无环图。根据题目意思,我们只需要找出一条点权最大的路径就行了,不限制点的个数。那么考虑对于一个环上的点被选择了,一整条环是不是应该都被选择,这一定很优,能选干嘛不选。很关键的是题目还允许我们重复经过某条边或者某个点,我们就不需要考虑其他了。因此整个环实际上可以看成一个点(选了其中一个点就应该选其他的点)强连通定义:在有向图...
2019-06-05 16:47:52
954
原创 堆 P3378 【模板】堆
这个堆是边插入边操作的 和全部给出那种变成堆是有区别的#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int head[N];int sz;void push(int x){ head[++sz]=x;//先插入到最新叶节点 int now=sz; while(now){ int ...
2019-06-04 22:09:02
315
原创 Codeforces Round #563 (Div. 2)
A:题意:给2*n个数,如何重新排序使得前n个和后n个不相同,如果一直相同则输出-1题解:从大到小排序如果第一个和最后一个是相同的说明所有值都是相同的,则此时输出-1 否则输出排序好的序列#include<bits/stdc++.h> using namespace std;int main(){ int n; scanf("%d",&n); vect...
2019-06-04 17:19:47
382
原创 秦九韶算法
给定a[]和x,求多项式的值。double f (int n,double a[],double x){//n代表a[]的大小,数组的传递需要指定数组大小 int i; //a[]储存每个x项的系数值,在函数外初始化 double p=a[n];//初始化p; for(i=n;i>0;i--) ...
2019-06-03 20:40:37
400
原创 三分
二分查找 适用于单调函数中逼近求解某点的值。如果遇到凸性或凹形函数时,可以用三分查找求那个凸点或凹点。下面的方法应该是三分查找的一个变形。如图所示,已知左右端点L、R,要求找到白点的位置。思路:通过不断缩小 [L,R] 的范围,无限逼近白点。做法:先取 [L,R] 的中点 mid,再取 [mid,R] 的中点 mmid,通过比较 f(mid) 与 f(mmid) 的大小来...
2019-06-03 20:38:23
170
原创 挑战程序设计 CGL_7_E:Cross Points of Circle
/*向量a ,向量bc=a-b c的方向指向的是a 指向的是被减数 pai=3.1415926=acos(-1.0); C++中cos,sin,asin,acos这些三角函数操作的是弧度,而非角度,你需要把角度转化为弧度.弧度=角度*Pi/180;例子1:比如对边和邻边分别为a,b 设角度为x,则 x=atan(a/b); 其中x为弧度制 如需转换为角度值,则x*1...
2019-05-31 19:36:56
273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人