模板
除以零_
这个作者很懒,什么都没留下…
展开
-
斐波那契公约数
F(n)表示第n项的斐波那契数。问F(n)和F(m)的最大公约数暴力做法是直接求出F(n)和F(m)然后用gcd或者__gcd求,但这种做法显然是要费时间的。结论:gcd(F(n),F(m))= F(gcd(n,m))直接使用矩阵快速幂可快速求得F(n)和F(m)的最大公约数struct mat{ll a[3][3],r,c;}; mat mul(mat x,mat y){ ...原创 2018-12-08 11:28:34 · 221 阅读 · 0 评论 -
RMQ问题 ST_table 实现
void RMQ_init(int l, int r){ int i, j; for (i = l; i <= r; ++i) dp[i][0] = a[i]; for (j = 1; l + (1 << j) - 1 <= r; ++j) { for (i = l; i + (1 << j) ...原创 2018-12-08 11:50:12 · 190 阅读 · 0 评论 -
洛谷 p1197 星球大战
传送门:星球大战致敬老鹰乐队,播放上一曲Hotel California,边听边看。题意:反叛军想要摧毁帝国的星球。帝国的星球之间有着以太作为连接,以次帝国的星球直接或者间接相连着。反叛军每摧毁一个星球,其星球就不复存在,其和其他星球的以太隧道也将断开。给出一个k 是反叛军将要摧毁的星球数目,然后依次告诉你这k个即将被摧毁的星球的编号。问每次叛军摧毁一个星球后,有多少个连通块,如果两个星球...原创 2018-12-12 20:29:06 · 295 阅读 · 0 评论 -
luogu p1967 货车运输
题意:有n座城市,其间有m条道路相连,构成无向图,图中可能存在孤点。每条道路有一个限重值,货车走这条道路时所载货物的重量不应超过限重值。有q次询问,每次询问给出两个城市,问从城市1到城市2之间货车的最大载重是多少。思路:从第一个城市 即节点1开始建立一颗最大生成树,然后在树上进行LCA操作,找出最近公共祖先,两个节点之间最小边权的最大值(即为题中的最大载重)。1.先构造最大生成树,用Kru...原创 2018-12-10 09:01:40 · 332 阅读 · 0 评论 -
luogu p3379 LCA模板
题意就是要求任意两点的LCA,并指定了书的根节点,从根节点开始dfs和预处理。题目数据不强,估计有意降低难度,保证输入是棵树,所以没有孤立的点。算是记录,练习一下倍增LCA的写法。/* * Do not go gentle into that good night * ----Dylan Thomas * Aut...原创 2018-12-10 09:59:22 · 164 阅读 · 0 评论 -
Tarjan
没有写的太细,就是当记录模板了。因为更具体的细节我也不是太明白,写出来误导了别人就不好了Tarjan算法可以缩点,求强连通分量(有向图范围),求割点,桥,双联通分量(无向图范围)。今天记录一下Tarjan算法求无向图的割点。Tarjan算法,首先要有两个必备数组 dfn[] 和 low[] dfn[i]就是时间戳,即在什么时刻搜索到了点i;low[i]则是i点能回溯到的dfn最小的祖先...原创 2018-12-17 20:00:03 · 249 阅读 · 0 评论 -
KMP简单模板
例题是 Oulipo题意是问主串中模式串出现啦多少次。属于简单KMP的应用,使用扩展KMP,实现计数即可。特此记录下KMP的模板方便以后使用。/* * Do not go gentle into that good night * ----Dylan Thomas * Author: looooop * Cr...原创 2019-01-19 17:26:26 · 192 阅读 · 0 评论 -
树的最小支配集,最小点覆盖与最大独立集
最小支配集定义1:对于图G=(V,E)来说,最小支配集指的是从V中取尽量少的点组成一个集合,使得对于V中剩余的点都与取出来的点有边相连。也就是说,设V‘是图G的一个支配集,则对于图中的任意一个顶点u,要么属于集合V’,要么与V‘中的顶点相邻。在V’中出去任何元素后V‘不再是支配集,则支配集是极小支配集。称G的所有支配集中顶点个数最少的支配集为最小支配集,最小支配集中顶点的个数称为支配数。最...原创 2019-01-26 17:37:05 · 773 阅读 · 0 评论 -
Hopcroft-Karp 算法
Hopcroft-Karp算法是求二分图最大匹配的匈牙利算法的优化算法。代码虽然比匈牙利算法的代码量大,复杂一些,但时间复杂度优化不少。这里先暂记一下模板,里面有注释。日后在补上说明和讲解,其实我不会证明。学算法都只是学会了怎么用,没学懂过证明。(惭愧)。以下第一张图是洛谷的模板题使用匈牙利的情况。第二张是使用 Hopcroft-Karp的情况。代码不记得是不是模板题的代码,但...原创 2019-01-31 19:47:03 · 2814 阅读 · 0 评论 -
PowerString 之KMP字符串匹配
PowerString这道题所带来的KMP字符串匹配算法的小知识点之前记录了KMP算法的简单模板。一个是KMP_Index 和 KMP_Count前者用于解决模式串在主串中第一次出现的位置。后者算是KMP的拓展,计算模式串在主串中出现了多少次。KMP算法的核心是next 数组的理解和应用。简单的KMP例题直接套用模板,稍微复杂一些的题目就要去思考next 数组和题目之间的联系。关于next 数...原创 2019-01-22 16:07:11 · 471 阅读 · 0 评论 -
快速傅里叶变换模板记录
例题记得应该是 hdu的 1402,傅里叶变换是一个模板。怎么写是大致固定的,但是如何使用就有考究了。具体傅里叶的讲解我存上一片博客,写的相当不错。FFT详解---在此声明地址(https://blog.csdn.net/GGN_2015/article/details/68922404)。非常佩服这样的同学,不仅知识学的多,而且还可以写的文章清晰明了,讲解清楚#include <io...原创 2019-02-24 09:29:04 · 214 阅读 · 0 评论 -
二分图匹配相关算法
二分图匈牙利算法 二分图匈牙利算法二分图匈牙利算法这里简单记录下二分图匹配的相关算法,供自己使用。如果各位游客看到觉得浪费时间,便请移步,文章全为个人模板记录匈牙利算法匈牙利算法研究的是二分图的最大匹配,是对给定的二分图求得最大的满足条件的匹配数,匹配对。其算法思想是利用Berge定理和Hall定理将初始匹配通过迭代寻找增广路径得到最大匹配,每次迭代得到的匹配大小加1具体迭代实现有DFS...原创 2019-02-25 23:09:47 · 452 阅读 · 0 评论 -
简单数论
判断素数 判断素数 判断素数一般来说判断素数我们会使用O(n\sqrt nn)的判断方法,就像下面一样if (n &amp;amp;amp;lt;= 3) { return n &amp;amp;amp;gt; 1; } int Sqrt = (int)sqrt(n); for (int i = 2; i &amp;amp;amp;lt;= Sqrt; i++) { if(n % i == 0) {原创 2019-02-26 21:10:38 · 333 阅读 · 0 评论 -
__int128的I/O操作
_int128 类型的数据是大整数类型,貌似只可以在Linux操作系统环境下的gcc编译器才可以使用,但是C99标准未提供__int128的I/O操作的具体操作,需要我们自己去实现。下面是找的IO模板,若使用printf("%lld\n", (__int128)a);这种操作虽然可以输出东西但是你会在编译中得到如下警告warning: format ‘%lld’ expects argument...原创 2019-03-10 09:31:18 · 561 阅读 · 0 评论 -
树状数组求逆序对
树状数组求逆序对树状数组可以进行Point Update Interval Query 点更新,段求和的操作。同时也可以进行求逆序对。首先要先了解树状数组的概念,树状数组是一种数据结构,具体的讲解我不写了,这个不是今天的重点 具体讲解步入正题在使用树状数组求逆序对中,树状数组的背景含义将有所变化。 以a[]数组表示我们要存储的一个数列,tree[]表示树状数组。初始化我们把tree数组全...原创 2019-03-15 22:04:28 · 211 阅读 · 0 评论 -
有重复全排列
#include<iostream>#include<algorithm>using namespace std;void swap(char& a,char& b) //两个元素进行交换{ char c = a; a = b; b = c;}bool isSwap(char b[]...转载 2018-12-07 21:51:31 · 700 阅读 · 0 评论 -
扩展GCD-2
typedef long long ll;//扩展gcd求解x,y同时还把gcd(a,b)求出来了,exgcd的返回值就是gcd(a,b)ll exgcd(ll a, ll b, ll &x, ll &y) { if(b == 0) { x = 1; y = 0; return a; }原创 2018-01-24 10:52:24 · 271 阅读 · 0 评论 -
扩展GCD
void exgcd(LL a,LL b,LL &c,LL &x,LL &y){ if(!b) { c=a; x=1; y=0; } else { exgcd(b,a%b,c,y,x); y-=x*(a/b); }}原创 2018-01-24 10:52:43 · 171 阅读 · 0 评论 -
快速幂
LL qpow(LL a, LL b, LL mod) //a^b%mod{ LL ans=1; while(b) { if(b&1) ans=(ans*a)%mod; a=(a*a)%mod; b>>=1; } return ans;} ...原创 2018-01-24 10:52:57 · 158 阅读 · 0 评论 -
最长上升子序列
#include#include#include#include#includeusing namespace std;typedef long long LL ;const int maxn = 1e6 + 9;int t;int p;int a[maxn];int dp[maxn];int main(){ scanf("%d",&t); while(t原创 2018-01-24 10:53:12 · 162 阅读 · 0 评论 -
高精度加法
string add(string a,string b){ string s; int len1,len2; len1=a.size()-1; len2=b.size()-1; int flag=0; while(len1>-1&&len2>-1) { int sum=flag+(a[len1-...原创 2018-02-08 09:49:17 · 173 阅读 · 0 评论 -
高精度减法模板
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000;char s1[maxn], s2[maxn], s3[maxn];int a[maxn], b[maxn];int main(){ int l...转载 2018-02-08 10:02:54 · 197 阅读 · 0 评论 -
博弈-套路板子
巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。当n 和 m 满足:n %(m+1)== 0.先手必败;威佐夫博弈: 首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个。先取完者赢。当局势(a,b)是(int)((b-a)*(sqrt(5)+ 1)/2 ) == a;时即 a == (int)* ((...原创 2018-02-08 10:32:45 · 249 阅读 · 0 评论 -
数位DP模板
typedef long long ll; int a[20]; ll dp[20][state];//不同题目状态不同 ll dfs(int pos,/*state变量*/,bool lead/*前导零*/,bool limit/*数位上界变量*/)//不是每个题都要判断前导零 { //递归边界,既然是按位枚举,最低位是0,那么pos==-1说明这个数我枚举完了 ...转载 2018-03-08 16:48:42 · 249 阅读 · 0 评论 -
KMP
/*pku3461(Oulipo), hdu1711(Number Sequence)这个模板 字符串是从0开始的Next数组是从1开始的 求T串是否为S串的子串?主串为 abdabdabc S串 模式串 abdabc T串S[0]=T[0] S[1]=T[1],S[2]=T[2]...S[4]=T[4]S[5]!=T[5] 一般情况下重新匹配S[1]和T[...转载 2018-05-04 21:21:40 · 183 阅读 · 0 评论 -
codevs-1332 上白泽慧音
题意不用多说,有向图,求强联通分量。找到强连通分量中定点最多的分量,并输出该最大分量中包含的顶点。是一道求强连通分量的模板题,用的是Kosaraju算法。Kosaraju算法步骤:1.先根据题意建原图与原图的反图2.根据原图进行第一次DFS,(DFS1)得到一个ord[]数组,存放DFS1的遍历顺序3.再根据ord[]数组,按照第一次的遍历顺序去DFS(DFS2)反图,染色。染...原创 2018-11-10 11:31:50 · 235 阅读 · 0 评论 -
codevs1332 Tarjan的写法
上篇文章,记录了用Kosaraju算法写这道模板题,为了学习强连通分量,又去学习下Tarjan算法。先看书,嗯,感觉看文字看完了,讲的啥玩意,为啥呀?不懂。于是还是先百度一下吧。啊,这篇文章不错,讲了一些,还给了模板,虽然背后的原理还是没懂,但大致算法步骤知道了。自己加了很多注释。/* *looooop * Do not go gentle into that good night...原创 2018-11-10 16:16:45 · 198 阅读 · 0 评论 -
洛谷 P3119草鉴定
题目大意有n个草场,有向图连接,从第一个草场出发,最终回到第一个草场。每经过一个草场就可以吃一次草,问假如可以偷偷逆向走一条道路,最多可以吃到多少次草刚看到这道题,第一想法就是Tarjan缩点,求强连通分量。但是题目有个额外要求,可以有一次的机会逆向走一条道路。刚开始有点不会处理这个额外的要求。有模糊的想法但不对,看到别人的题解后感觉可以行的通。先进行Tarjan缩点,构造一个DAG图,然后分...原创 2018-12-04 19:48:31 · 265 阅读 · 0 评论 -
网上找的头文件
ACM头文件#include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #include <map> #include <set> #include &am原创 2018-12-07 17:28:56 · 131 阅读 · 0 评论 -
最短路的Floyd-Dijkstra-Spfa板子
int maps[105][105];int n,m;//初始化void init(){ for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(i==j) maps[i][j]=0; else原创 2018-01-22 13:00:47 · 390 阅读 · 0 评论