![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
Nemaleswang
ACM退役狗一只
展开
-
ACM 对拍
【代码】ACM 对拍。原创 2024-08-19 16:38:02 · 139 阅读 · 0 评论 -
ACM现场赛打印模板
写一个最大公约数gcd和最小公倍数lcm和扩展欧几里得exgcd的比较简单的模板int gcd(int a,int b){ return b?gcd(b,a%b):a;} int lcm(int a,int b){ return a/gcd(a,b)*b;} int exgcd(int a,int b,int &x,int &y){//ax+by = gcd(a,b);(1) if(b == 0){ x = 1;y = 0; re原创 2024-08-19 00:51:06 · 475 阅读 · 0 评论 -
主席树模板
【代码】主席树模板。原创 2024-08-19 00:20:06 · 78 阅读 · 0 评论 -
博弈论 SG函数
【代码】博弈论 SG函数。原创 2024-08-16 01:20:14 · 125 阅读 · 0 评论 -
二维前缀和和二维差分
【代码】二维前缀和和二维差分。原创 2024-08-14 01:17:13 · 76 阅读 · 0 评论 -
后缀数组模版
【代码】后缀数组模版。原创 2024-08-12 18:56:15 · 100 阅读 · 0 评论 -
codeforce避免被卡的unordered_map
【代码】codeforce避免被卡的unordered_map。原创 2024-06-04 19:47:35 · 120 阅读 · 0 评论 -
字符串哈希
使用unsigned long long来做自然溢出。原创 2024-02-04 15:28:14 · 161 阅读 · 0 评论 -
数位dp模板
【代码】数位dp模板。原创 2023-08-05 13:57:41 · 147 阅读 · 0 评论 -
RMQ算法模板
RMQ算法,主要用于求区间最大值或者区间最小值。本质就是通过倍增的方法进行计算。原创 2022-09-04 00:22:55 · 231 阅读 · 1 评论 -
快速幂模板
看了一下那么多的快速幂模板,决定还是贴一个精简一点的LL quickm(LL a,LL b,LL mod)//快速幂{ LL ans = 1; while(b) { if(b&1) ans = (ans*a)%mod; a = (a*a)%mod; b >>= 1; } return ans;}原创 2016-07-10 13:10:03 · 431 阅读 · 0 评论 -
网络流模板
最大流Dinic模板const int MAXN = 1000+100;const int MAXM = 1000000+10;const int INF = 1000000+10;struct Edge{ int from, to, cap, flow, next;}edge[MAXM];int dist[MAXN], vis[MAXN], cur[MAXN], top, head[原创 2017-09-06 20:25:29 · 259 阅读 · 0 评论 -
线性筛莫比乌斯函数
莫比乌斯全家桶ll prime[maxn],mob[maxn],vis[maxn],cnt;void Mobius(){ memset(prime,0,sizeof(prime)); memset(mob,0,sizeof(mob)); memset(vis,0,sizeof(vis)); mob[1] = 1; cnt = 0; for(ll i =原创 2017-08-29 10:45:41 · 611 阅读 · 0 评论 -
矩阵快速幂模板
贴一个矩阵快速幂的模板,具体的讲解可以去看这里啦http://www.bilibili.com/video/av8570006/这个模板大概就是算一个n*n矩阵的的x次方对1e9+7求余#include using namespace std;typedef long long ll;const int maxn = 110;const int MOD = 1e9+7;#de原创 2017-02-13 11:35:11 · 477 阅读 · 0 评论 -
欧拉函数板子
ll Euler(ll n){ ll res = n; for(ll i = 2;i*i <= n;i++){ if(n%i == 0) res = res/i*(i-1);//防止溢出 while(n%i == 0) n /= i; } if(n > 1) res = res/n*(n-1); return res;}原创 2017-08-26 09:27:31 · 473 阅读 · 0 评论 -
大数加减乘模板(十进制)
这个模板可以处理大数基本上所有的情况,正负数,零,加减乘都是可以的#include <map>#include <cmath>#include <queue>#include <stack>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include原创 2017-08-15 20:05:36 · 572 阅读 · 0 评论 -
数位dp模板
int digit[maxn];int dp[maxn][][][][];//维度int dfs(int num, ,bool limit) //位数,传递条件(dp维度),上界判断{ if(num == -1)return 0; //最后一位时,根据情况返回1或0或者其他情况,看题目到底需要的贡献是个啥 if(!limit && dp[num][][][](维度)!原创 2017-08-21 20:47:42 · 243 阅读 · 0 评论 -
并查集的find和join函数实现
int Find(int x){ if(pre[x] != x) pre[x] = Find(pre[x]); return pre[x];}void join(int x, int y){ int p,q; p = Find(x); q = Find(y); if(p!=q) pre[p] = q;}原创 2016-10-23 21:22:17 · 910 阅读 · 1 评论 -
Tarjan
//记得每次清边vector<int>Edge[maxm];stack<int>S;int Dfn[maxn],Low[maxn],sccno[maxn],tclock,sccnt;//sccno代表某个点所在的强连通分量编号void tarjan(int u){ Dfn[u] = Low[u] = ++tclock; S.push(u); for(int i = 0;i原创 2017-09-18 22:14:06 · 1044 阅读 · 0 评论 -
后缀数组模板
const int N = 1e6+10;int n;namespace SA { int sa[N], rank[N], height[N], s[N<<1], t[N<<1], p[N], cnt[N], cur[N]; int MIN[N][30]; #define pushS(x) sa[cur[s[x]]--] = x #define pushL(x) s原创 2017-09-27 22:12:16 · 298 阅读 · 0 评论 -
树状数组模板
更新值和区间求和,以及lowbitint N,c[50005];int lowbit(int i){ return i&(-i);}void add(int i,int value){ while(i <= N){ c[i] += value; i += lowbit(i); }}int sum(int i){ int原创 2017-02-26 15:08:09 · 521 阅读 · 0 评论 -
斯特林近似求N阶乘的长度
#include using namespace std;typedef long long ll;#define PI 3.1415926#define E 2.718281828459int main(){ ll n; cin >> n; ll res = 0.5 * log10(2.0 * PI * n) + n * lo原创 2016-08-21 18:39:23 · 863 阅读 · 0 评论 -
最小生成树模板
prim模板(hihocoder1097,不带优化,时间复杂度为O(n*n)):int n,mat[maxn][maxn],d[maxn],vis[maxn];int ans,End;int main(){ scanf("%d",&n); for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j...原创 2018-06-11 20:49:46 · 333 阅读 · 1 评论 -
拓扑排序模板
扔一个拓扑排序的板子,从度数为零的开始删,然后慢慢靠删度数来达到删边的效果,可以算一个有向图是否有环,删边的直接模拟一个inDeg–就好了const int maxn = 1e5+10;vectorint>vec[maxn];int inDeg[maxn];int ans,T,n,m,u,v,sorted;queueint>q;bool topsort(){ whil原创 2018-01-17 17:52:23 · 416 阅读 · 0 评论 -
背包问题
01背包(hdoj 饭卡问题,5块随便买,问最大价值):#include <bits/stdc++.h>using namespace std;int main(){ int n,V,w[1005],dp[1005]; while(cin>>n&&n){ memset(dp,0,sizeof(dp)); for(int i = 1;i <= n;i++原创 2017-10-27 22:30:28 · 319 阅读 · 0 评论 -
米勒拉宾素数测试
ll quick_pow(ll a,ll b,ll r)//快速幂 { ll ans = 1; while(b) { if(b&1)ans=(ans*a)%r; a = (a*a)%r; b>>=1; } return ans;}bool Miller_Rabbin(int n,in原创 2016-07-19 14:15:47 · 1507 阅读 · 0 评论 -
二分图各种模板
二分图最大匹配int line[maxn][maxn],used[maxn],nxt[maxn];//line[i][j]代表有没有边,used代表在这次匹配的过程种右边点用过没有,nxt为右边的归属bool Find(int x){ for(int i = 1;i <= m;i++){//m为二分图右边的点个数 if(line[x][i]&&!used[i]){原创 2017-10-27 17:47:41 · 289 阅读 · 0 评论 -
01字典树模板
单纯的普通字典树(求前缀用)#include #include #include #include #include #include #include #include #include #include #include原创 2017-10-11 21:14:27 · 281 阅读 · 0 评论 -
树状数组及其离散化模板
1)、单点增减+区间求和 思路:C[x]表示该点的元素:sum(x)=C[1]+C[2]+……C[x]int arr[MAXN];inline int sum(int x){int res=0; while(x) res+=arr[x],x-=lowbit(x);return res;}inline void add(int x,int n){while(x原创 2017-09-20 17:07:12 · 267 阅读 · 1 评论 -
Dijkstra模板
Dijkstra算法是一个计算单源最短路径的算法,但是注意图中不能出现负权const int MAXINT = 32767;const int MAXNUM = 10;int dist[MAXNUM];int prev[MAXNUM];int A[MAXUNM][MAXNUM];void Dijkstra(int v0){ bool S[MAXNUM];原创 2016-08-09 07:33:38 · 492 阅读 · 0 评论 -
Lucas定理模板
Lucas定理:Lucas定理是用来求 C(n,m) mod p的值,p是素数(从n取m组合,模上p)。描述为:Lucas(n,m,p)=C(n%p,m%p)* Lucas(n/p,m/p,p)Lucas(x,0,p)=1;简单的理解就是:以求解n! % p 为例,把n分段,每p个一段,每一段求得结果是一样的。但是需要单独处理每一段的末尾p,2p,...,把原创 2016-08-23 19:25:16 · 950 阅读 · 2 评论 -
1000亿以内的素数统计(Meisell-Lehmer算法)
今年沈阳有个素数计数的题,但是数据到了1e11,大概用Meisell-Lehmer能跑到2、3秒的样子,但是据说还有一种Deleglise Rivat的算法特别快,大概1e16差不多才3、4秒的样子,但是网上没有找到板子,所以就发一个Meisell-Lehmer的模板,1e11内的数差不多都能在5秒内处理完:#includeusing namespace std;typedef long原创 2016-09-19 09:10:10 · 4859 阅读 · 1 评论 -
编辑距离
编辑距离既是指给定两个字符串,给定添加,删除,改变3种操作,求定最少的操作次数:#include using namespace std;typedef long long LL;const int inf = 0x3f3f3f3f, N = 1e3 + 5, MOD = 1e9 + 7;int T, cas = 0;int n, m;int dp[N][N];char s[原创 2016-09-05 20:59:01 · 346 阅读 · 0 评论 -
插入最少字符使字符串回文(LCS,DP)
给定一个字符串,求插入最少的字符使得原字符串回文,求出该字符串逆序与正序的最长公共子序列长度,再用dp搞一下就行:#include using namespace std;int dp[1005][1005];int main(){ string x,y; cin>>x; y = x; reverse(y.begin(),y.end()); fo原创 2016-08-26 12:07:35 · 1080 阅读 · 0 评论 -
Manacher算法求最长回文子串模板
在求一个字符串的最长回文子串时,当数据较大的时候,需要用到Manacher算法:#include using namespace std;const int N = 220005;char s[N];int p[N],n,id,mx;void Manacher(){ id = mx = 0; int ans = 0; n = strlen(s); f原创 2016-08-26 11:31:30 · 491 阅读 · 0 评论 -
博弈模板(bash,威佐夫,Nim)
写一些博弈模板,借用51Nod上的题目:Bash游戏:有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。#include using namespace std;int main(){ int t,n,k; scanf("%d原创 2016-08-22 17:18:35 · 451 阅读 · 0 评论 -
归并排序模板
贴一个归并排序的模板:#define max 1000001long long a[max],b[max];long long count;void Merge(long long a[], int start, int mid, int end) //归并排序的合并部分{ int i = start,j = mid + 1,k = start; while(i <=原创 2016-08-02 13:01:21 · 439 阅读 · 0 评论 -
最长连续上升子序列
贴一个最长连续上升子序列的模板:#include using namespace std;int main(){ int n,a[100005]; scanf("%d",&n); for(int i = 0 ;i < n;i++) scanf("%d",&a[i]); int len = 1,maxn = 1; for(int i =原创 2016-07-30 12:41:31 · 635 阅读 · 0 评论 -
hdu 5532 Almost Sorted Array(最长上升(不下降)子序列和最长下降(不上升)子序列)
看了下去年(2015)的长春赛区的题,发现一道比较好玩的题,hdu #include using namespace std;int main(){ int T,n,i,j,k,a[100005],k1,k2,ans[100005],len,b[100005],flag; scanf("%d",&T); while(T--) { flag=原创 2016-06-22 14:58:43 · 704 阅读 · 0 评论 -
最长公共子序列
贴一个最长上升子序列的模板吧:#includeusing namespace std;const int maxn = 1111;int dp[maxn][maxn]={0};string a,b;void LCS(int n,int m){ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a原创 2016-07-26 11:11:46 · 416 阅读 · 0 评论