
Daily algorithm
「已注销」
这个作者很懒,什么都没留下…
展开
-
后缀数组
#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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
秦九韶算法
给定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 阅读 · 0 评论 -
三分
二分查找 适用于单调函数中逼近求解某点的值。如果遇到凸性或凹形函数时,可以用三分查找求那个凸点或凹点。下面的方法应该是三分查找的一个变形。如图所示,已知左右端点L、R,要求找到白点的位置。思路:通过不断缩小 [L,R] 的范围,无限逼近白点。做法:先取 [L,R] 的中点 mid,再取 [mid,R] 的中点 mmid,通过比较 f(mid) 与 f(mmid) 的大小来...原创 2019-06-03 20:38:23 · 172 阅读 · 0 评论 -
树的分治
我们先随意指定一个根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 · 271 阅读 · 0 评论 -
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 阅读 · 0 评论 -
树的重心
/*poj 1655 题意:求树的重心和去掉重心的最大子树树的重心定义:对于一个树中节点x,当我们删去它时会将原来的树分割成若干个不相连的部分,其中每个部分都是一颗子树。设max_part表示这些部分中最大的一棵子树,若删去节点x能够使得max_part最小,则称这个点为树的重心 树的重心的性质:定义1:找到一个点,删除它得到的森林中最大的子树节点数最少,那么这个点就是这棵树...原创 2019-06-14 10:50:59 · 332 阅读 · 0 评论 -
区间dp
一.什么是区间dp?顾名思义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dp算法。二.核心思路既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。所以在代码实现上,我可以枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),内层枚举该...原创 2019-06-18 21:43:18 · 554 阅读 · 0 评论 -
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 阅读 · 0 评论 -
ac自动机
下面开始用图学习ac自动机吧(个人比较喜欢放图,能用一张图解决的绝不叨叨)首先给定模式串"ash","shex","bcd","sha",然后我们根据模式串建立如下trie树:然后我们再了解下一步:ac自动机,就是在tire树的基础上,增加一个fail指针,如果当前点匹配失败,则将指针转移到fail指针指向的地方,这样就不用回溯,而可以路匹配下去了.(当前模式串后缀和fail指针指向的...原创 2019-05-29 14:29:45 · 554 阅读 · 1 评论 -
复数std::complex
complex是个类模板,它可以采用float、double和long double 3种原始类型进行定制complex同时支持如下操作符:+-*/=+=-=*=/===!= 函数 含义 real() 返回复数的实部 imag() ...原创 2019-06-06 16:04:03 · 4701 阅读 · 0 评论 -
fft
https://blog.youkuaiyun.com/enjoy_pascal/article/details/81478582原创 2019-06-06 13:41:49 · 603 阅读 · 0 评论 -
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 阅读 · 0 评论 -
线段树维护---区间的平方值和
/*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 · 1176 阅读 · 0 评论 -
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 阅读 · 0 评论 -
再写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 阅读 · 0 评论 -
分块
题目链接题意:就是单点更新 区间查询最小值线段树做法:#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 阅读 · 0 评论 -
建立一棵二叉树 输出前序
/*洛谷 p1305输入一串二叉树,用遍历前序打出。第一行为二叉树的节点数n。(n \leq 26n≤26)后面n行,每一个字母为节点,后两个字母分别为其左右儿子。空节点用*表示6abcbdicj*d**i**j** 输出:abdicj思路:建立一个节点包含父节点 左儿子 右儿子 的节点(有父节点可以判断谁是根结点) */#include<bits/stdc...原创 2019-06-18 18:59:48 · 781 阅读 · 0 评论 -
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 · 274 阅读 · 0 评论 -
划分树
划分树,类似线段树,主要用于求解某个区间的第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 阅读 · 0 评论 -
矩阵加速(数列)
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 · 425 阅读 · 0 评论 -
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 阅读 · 0 评论 -
堆 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 阅读 · 0 评论 -
二分图匹配()
跑最大流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 阅读 · 0 评论 -
线段树(最小值)+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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
树的直径
/*poj 1985题意:一棵树n个点 m个边(有边值) 求最长的路径树的直径:定义:树上任意俩点的距离最大值方法:俩次bfs 任意一点找到最远的点u。在找离u最远的点v 既u->v即是直径 */#include<cstdio>#include<cmath>#include<algorithm>#include<st...原创 2019-06-12 17:28:58 · 287 阅读 · 0 评论 -
Polya定理
https://blog.youkuaiyun.com/WhereIsHeroFrom/article/details/79631703原创 2019-06-05 20:46:32 · 316 阅读 · 0 评论 -
欧拉函数
https://blog.youkuaiyun.com/liuzibujian/article/details/81086324原创 2019-06-05 20:20:29 · 186 阅读 · 0 评论 -
差分约束
一:差分约束的定义差分约束系统(system of difference constraints),是求解关于一组变数的特殊不等式组之方法。如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特...原创 2019-03-28 18:22:18 · 1918 阅读 · 0 评论 -
ST表 (求区间最大/最小值)
ST表ST表的功能很简单它是解决RMQ问题(区间最值问题)的一种强有力的工具它可以做到O(nlogn)预处理,O(1)是查询最值像线段树是O(logn)的查询算法ST表是利用的是倍增的思想拿最大值来说我们用st[i][j]表示,从i位置开始的2^j个数中的最大值,例如st[i][1]表示的是i位置和i+1位置中两个数的最大值那么转移的时候我们可以把当前区间...原创 2019-04-11 14:04:33 · 2464 阅读 · 0 评论 -
转动任意度数后求转动后的坐标(数学问题)
已知圆心和圆上一点的坐标,求圆上该点转动任意弧度之后的坐标。圆心(a,b),已知点A(x,y),逆时针转动弧度c(若是顺时针,则把c改成-c即可),点A变成点B(x',y')。设圆半径为r,圆心与A的连线与x轴夹角的弧度为d,则有x-a=r*cosdy-b=r*sind所以,x'-a=r*cos(d+c)=r*cosd*cosc-r*sind*sinc=(x-a)cosc-(y-b)...原创 2019-04-06 22:08:06 · 1458 阅读 · 1 评论 -
unique
unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。#include<iostream>#include<algorithm&...原创 2019-04-06 16:22:56 · 265 阅读 · 0 评论 -
其他进制转化为十进制
这个方法 和普通进制规律稍微有点不一样#include<bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; int id=0; for(int i=0;i<s.size();i++){ if(isalpha(s[i])){ id=id*16+s[i]-'A'+10...原创 2019-03-27 18:17:01 · 1111 阅读 · 0 评论 -
bitset
1.bitset存储二进制数位。2.bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一,可以当作一个bool型数组考虑,bitset<N> bs; 可以考虑成一个数组bool bs[N]。3.bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,表达式fo...原创 2019-03-26 20:23:28 · 429 阅读 · 0 评论 -
malloc new 的用法
正文 每个程序在执行时都会占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为自由存储区或堆。一.new和delete用法 如下几行代码:int *pi=new int;int *pi=new int();int *pi=new int(1024); 第一行这个new表达式在自由存储区中分配创建了一个整形对象,并返回一个指向该对象的地址来初始化指针pi...原创 2019-03-10 23:03:02 · 188 阅读 · 0 评论 -
大数类(加减乘除)
大数类的运算 其实就模拟我们小学学的加减乘除分析:我们都把字符串转化成int 数组比较好做1. 加法 【题目描述】 求两个不超过200位的非负整数的和。 【输入】 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 【输出】 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 ...原创 2019-03-22 19:33:06 · 423 阅读 · 0 评论 -
L3-015 球队“食物链” (30 分)(剪枝)
某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至N的排列{T1T2⋯TN},满足:球队T1战胜过球队T2,球队T2战胜过球队T3,⋯,球队T(N−1...原创 2019-03-26 11:10:58 · 218 阅读 · 0 评论 -
SG函数
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧.必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。 N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。必胜点和必败点的性质:1、所有终结点是 必败点 P 。(我们以此为基本前提进行推理,换句话说,我们以此为假设)...原创 2019-03-18 22:36:23 · 479 阅读 · 0 评论 -
Aizu - ALDS1_7_B Binary Trees(二叉树的表达 不用指针建树来执行二叉树的条件)
Binary TreeA rooted binary tree is a tree with a root node in which every node has at most two children.Your task is to write a program which reads a rooted binary treeTand prints the following ...原创 2019-03-21 19:33:03 · 314 阅读 · 0 评论