Hash:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#define REP(i,k,n) for(long long i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline long long read(){
long long x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
long long ha[];
long long n,m,S;
char s[],t[];
long long sum[],poww[];
long long k=1e9,k1=1e7;
int main(){
scanf("%s%s",s+,t+);
n=strlen(s+),m=strlen(t+);
poww[]=;
REP(i,,n) poww[i]=(poww[i-]*k)%k1;
REP(i,,n) sum[i]=(sum[i-]*k+(s[i]-'a'))%k1;
REP(i,,m) S=(S*k+(t[i]-'a'))%k1;
REP(i,m,n)
if(S%k1==(sum[i]-sum[i-m]*poww[m])%k1) cout<<i<<endl;
}

Kmp:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
char s[],t[];
int nxt[];
void getnxt(){
int j=;
nxt[]=;
REP(i,,m){
while(t[i+]!=t[j+] && j!=) j=nxt[j];
if(t[i+]==t[j+]) nxt[i+]=j+,j++;
else nxt[i+]=;
}
}
void pipei(){
int j=;
REP(i,,n){
while(s[i+]!=t[j+] && j!=) j=nxt[j];
if(s[i+]==t[j+]) j++;
if(j==m) cout<<i<<endl,j=nxt[j];
}
}
int main(){
scanf("%s%s",s+,t+);
n=strlen(s+),m=strlen(t+);
getnxt();
pipei();
}

AC-automata machine:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
queue <int> Q;
int n;
int tree[][],total=,isend[],nxt[];
char t[],s[];
void insert(char *s){
int l=strlen(s+),u=;
REP(i,,l){
if(!tree[u][s[i]-'a']) tree[u][s[i]-'a']=++total;
u=tree[u][s[i]-'a'];
}
isend[u]=;
return ;
}
void getnxt(){
REP(i,,) tree[][i]=;
Q.push(),nxt[]=;
while(!Q.empty()){
int u=Q.front();Q.pop();
REP(i,,)
if(!tree[u][i]) tree[u][i]=tree[nxt[u]][i];
else nxt[tree[u][i]]=tree[nxt[u]][i],Q.push(tree[u][i]);
}
return ;
}
void search(){
int u=;
REP(i,,strlen(s+)){
int j=tree[u][s[i]-'a'],ans=;
while(j>) ans+=isend[j],isend[j]=,j=nxt[j];
u=tree[u][s[i]-'a'];
if(ans) cout<<i<<endl;
}
}
int main(){
in(n);
REP(i,,n) scanf("%s",t+),insert(t);
getnxt();
scanf("%s",s+);
search();
}

 SPFA:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
queue <int> Q;
int n,m;
int total,head[],to[],nxt[],val[],dis[],vis[];
void adl(int a,int b,int c){
total++;
to[total]=b;
val[total]=c;
nxt[total]=head[a];
head[a]=total;
return ;
}
void SPFA(){
memset(dis,,sizeof(dis));
Q.push(),dis[]=;
while(!Q.empty()){
int u=Q.front();Q.pop();vis[u]=;
for(int e=head[u];e;e=nxt[e])
if(dis[to[e]]>dis[u]+val[e]){
dis[to[e]]=dis[u]+val[e];
if(!vis[to[e]]){
vis[to[e]]=;
Q.push(to[e]);
}
}
}
return ;
}
int main(){
in(n),in(m);
int a,b,c;
REP(i,,m) in(a),in(b),in(c),adl(a,b,c);
SPFA();
REP(i,,n) cout<<dis[i]<<" ";
}

Dijkstra:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int total,head[],to[],nxt[],val[];
int vis[],dis[];
struct node{
int ind,val;
};
priority_queue <node> Q;
bool operator < (node a,node b){
return a.val>b.val;
}
void adl(int a,int b,int c){
total++;
to[total]=b;
val[total]=c;
nxt[total]=head[a];
head[a]=total;
return ;
}
void Dijkstra(){
memset(dis,,sizeof(dis));
Q.push(node{,});dis[]=;
while(!Q.empty()){
int u=Q.top().ind;Q.pop();vis[u]=;
for(int e=head[u];e;e=nxt[e])
if(dis[to[e]]>dis[u]+val[e]){
dis[to[e]]=dis[u]+val[e];
Q.push(node{to[e],dis[to[e]]});
}
}
return ;
}
int main(){
in(n),in(m);
int a,b,c;
REP(i,,m) in(a),in(b),in(c),adl(a,b,c);
Dijkstra();
REP(i,,n) cout<<dis[i]<<" ";
}

Negative ring:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int total,head[],to[],nxt[],val[];
int dis[],vis[];
void adl(int a,int b,int c){
total++;
to[total]=b;
val[total]=c;
nxt[total]=head[a];
head[a]=total;
return ;
}
void dfs(int u){
for(int e=head[u];e;e=nxt[e]){
if(dis[to[e]]>dis[u]+val[e]){
dis[to[e]]=dis[u]+val[e];
if(!vis[to[e]]){
vis[to[e]]=;
dfs(to[e]);
vis[to[e]]=;
}
else cout<<"polite",exit();
}
}
return ;
}
int main(){
in(n),in(m);
int a,b,c;
REP(i,,m) in(a),in(b),in(c),adl(a,b,c);
dis[]=;
dfs();
}

Get negative Ring:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int total,head[],to[],nxt[],val[];
int dis[],vis[],book[];
stack <int> S;
void adl(int a,int b,int c){
total++;
to[total]=b;
val[total]=c;
nxt[total]=head[a];
head[a]=total;
return ;
}
void dfs(int u){
book[u]=;
for(int e=head[u];e;e=nxt[e]){
if(dis[to[e]]>dis[u]+val[e]){
dis[to[e]]=dis[u]+val[e];
if(!vis[to[e]]){
vis[to[e]]=;
S.push(to[e]);
dfs(to[e]);
S.pop();
vis[to[e]]=;
}
else{
while(!S.empty() && S.top()!=to[e]) cout<<S.top()<<" ",S.pop();
cout<<S.top(),S.pop(),exit();
}
}
}
return ;
}
int main(){
in(n),in(m);
int a,b,c;
REP(i,,m) in(a),in(b),in(c),adl(a,b,c);
REP(i,,n) if(!book[i]) S.push(i),vis[i]=,memset(dis,,sizeof(dis)),dfs(i);
S.push();
}
/*
4 5
1 2 1
2 3 -1
3 1 -2
3 4 2
1 4 3
*/

 lowest common ancestor:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int total,head[],to[],nxt[];
int tree[][],depth[];
inline void adl(int a,int b){
total++;
to[total]=b;
nxt[total]=head[a];
head[a]=total;
return ;
}
inline void dfs(int u,int fa){
REP(i,,) tree[u][i]=tree[tree[u][i-]][i-];
for(int e=head[u];e;e=nxt[e])
if(to[e]!=fa){
depth[to[e]]=depth[u]+;
tree[to[e]][]=u;
dfs(to[e],u);
}
return ;
}
inline int lca(int u,int v){
if(depth[u]<depth[v]) swap(u,v);
int d=depth[u]-depth[v];
for(int i=;(<<i)<=d;i++) if((<<i) & d) u=tree[u][i];
if(u==v) return u;
for(int i=;i>=;i--) if(tree[u][i]!=tree[v][i]) u=tree[u][i],v=tree[v][i];
return tree[u][];
}
int main(){
in(n);
int a,b;
REP(i,,n-) in(a),in(b),adl(a,b),adl(b,a);
depth[]=,dfs(,);
in(m);
REP(i,,m){
in(a),in(b);
printf("%d\n",lca(a,b));
}
return ;
}

binary index tree:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int tree[];
inline void add(int i,int a){
for(;i<=n;i+=(i&-i)) tree[i]+=a;
return ;
}
inline int get(int i){
int ans=;
for(;i>;i-=(i&-i)) ans+=tree[i];
return ans;
}
int main(){
in(n);
int a,b,p;
REP(i,,n) in(a),add(i,a);
in(m);
REP(i,,m){
in(p);
if(p==) in(a),in(b),add(a,b);
else in(a),in(b),printf("%d\n",get(b)-get(a-));
}
}
/*
3
1 2 3
100
1 2 5
*/

ST table:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m,a,b;
int s[][];
int Log[];
int main(){
in(n);
REP(i,,n) in(s[i][]);
REP(j,,)
for(int i=;i+(<<j-)<=n;i++)
s[i][j]=min(s[i][j-],s[i+(<<j-)][j-]);
Log[]=;
REP(i,,) Log[i]=Log[i>>]+;
in(m);
REP(i,,m){
in(a),in(b);
int x=Log[b-a+];
cout<<x<<" "<<b-(<<x)+<<endl;
cout<<min(s[a][x],s[b-(<<x)+][x])<<endl;
}
return ;
}

 exgcd:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int a,b,d,x,y,t;
void exgcd(int a,int b,int &d,int &x,int &y){
if(b==) x=,y=,d=a;
else exgcd(b,a%b,d,x,y),t=x,x=y,y=t-a/b*y;
return ;
}
int main(){
in(a),in(b);
exgcd(a,b,d,x,y);
cout<<x<<" "<<y<<endl;
}

持续更新......

dititally DP:

Chinese remainder theorem:

 

NOIP 算法模板的更多相关文章

  1. 匈牙利 算法&模板

    匈牙利 算法 一. 算法简介 匈牙利算法是由匈牙利数学家Edmonds于1965年提出.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 二分图的定义: 设G=(V,E)是一个 ...

  2. Tarjan 算法&模板

    Tarjan 算法 一.算法简介 Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度. 我们定义: 如果两个顶点可以相互通达,则称两个顶点强连 ...

  3. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

  4. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  5. poj 1274 The Perfect Stall【匈牙利算法模板题】

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20874   Accepted: 942 ...

  6. NOIP算法总结与复习

    NOIP算法总结与复习 (看了看李总的蓝皮书,收获颇多,记下此文,以明志--) (一)数论 1.最大公约数,最小公倍数 2.筛法球素数 3.mod规律公式 4.排列组合数,错排 5.Catalan数 ...

  7. 最短路径---dijkstra算法模板

    dijkstra算法模板 http://acm.hdu.edu.cn/showproblem.php?pid=1874 #include<stdio.h> #include<stri ...

  8. 算法模板学习专栏之总览(会慢慢陆续更新ing)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/7495310.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  9. POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]

    妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...

随机推荐

  1. -bash: /bin/rm: Argument list too long的解决办法【转】

    当目录下文件太多时,用rm删除文件会报错: -bash: /bin/rm: Argument list too long 提示文件数目太多. 解决的办法是使用如下命令: ls | xargs -n 1 ...

  2. Python缓存技术,装x新高度。

    一段非常简单代码 普通调用方式 def console1(a, b): print("进入函数") return (a, b) print(console1(3, 'a')) pr ...

  3. C# 序列化高级用法

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  4. pip离线安装

    pip freeze > requirements.txt pip download <packages> pip install --no-index --find-links=& ...

  5. UrlRouteModule

    一.请求流程 当一个请求发往ASP.net MVC站点时的情景,IIS收到请求并将请求转到ASP.net,然后根据URL,或者更确切来说:被请求文件的扩展名.在IIS7 integrated模式下(默 ...

  6. Densely Connected Convolutional Networks 论文阅读

    毕设终于告一段落,传统方法的视觉做得我整个人都很奔溃,终于结束,可以看些搁置很久的一些论文了,嘤嘤嘤 Densely Connected Convolutional Networks 其实很早就出来了 ...

  7. ThinkPHP联表查询

    $list = db($pnav['ename']) -> field('a.*,b.name as pname') ->alias('a') -> join('sbl_nav b' ...

  8. HDU 3374 String Problem(KMP+最大(最小)表示)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:给出一个字符串,依次左移一个单位形成一堆字符串,求其字典序最小和最大的字符串需要左移多 ...

  9. MySQL执行计划explain的key_len解析

    前言:当用Explain查看SQL的执行计划时,里面有列显示了 key_len 的值,根据这个值可以判断索引的长度,在组合索引里面可以更清楚的了解到了哪部分字段使用到了索引.下面演示中,表结构的合理性 ...

  10. C++中bool类型变量初值对程序的影响

    很困惑的一个问题 #include<iostream> using namespace std; int main() { //bool a=true; //非0(1,2,3,……)输出1 ...