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. go 匿名函数和闭包

    匿名函数 1. 函数也是一种类型,因此可以定义作为一个函数类型的变量 package main import "fmt" // 函数作为参数 func add(a, b int) ...

  2. git fetch 命令

    git fetch命令用于从另一个存储库下载对象和引用. 使用语法 git fetch [<options>] [<repository> [<refspec>…] ...

  3. python socket编程和黏包问题

    一.基于TCP的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端,有顺序,不重复,可靠.不会被加上数据边界. server端 import socket sk = so ...

  4. 一、springcloud服务注册、发现、调用(consul/eureka)

    1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  5. ubuntu 创建容器 并ssh 连接容器

    1.下载镜像:docker search ubuntu docker pull ubuntu 2. 创建容器 docker run --name spider_frame -p 8888:8888 - ...

  6. php和mysql两种不同方式的分割字符串和类型转换

    一.sql语句1.分割字符串方法:substring_index(字符串,'分隔符',正数从左数起几位/负数从右数起几位); 例如:subtring_index('aa_bb_cc_dd','_',1 ...

  7. MP3 Fuzz学习

    这篇文章主要是学习一波MP3格式fuzz的知识.目录如下 0x0.MP3格式的构成 0x0.MP3格式的构成 MP3是一种通俗叫法,学名叫MPEG1 Layer-3.MP3是三段式的结构,依次由ID3 ...

  8. log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).

    一.异常描述: log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLo ...

  9. 极简操作无需root隐藏S8导航栏和状态栏

    距离三星Galaxy S8国行发布快一个礼拜了,相信论坛不少小同伴已经拿到手,许多人和我一样被那块全视曲面屏给诱惑剁手的,当拿到手把玩一段时间后却發现这么美的一块屏幕居然大部分应用上下都有一行碍眼的状 ...

  10. CentOS 7下安装Python3.6和pip

    一.安装python3.6 1.1.安装python3.6需要依赖包 yum install openssl-devel bzip2-devel expat-devel gdbm-devel read ...