//PS:最近修改日期:2017-11-07  20:41:44

首先感觉这种模板类的东西写了还是很有意义的,毕竟时不时的可以拿出来借鉴一下。

现在因为刚开始写这一类的东西,所以说还不是很详细,若有读者感觉可以补充,欢迎反馈!!感激不尽!!

注意!在本篇文章中,有:

#include<bits/stdc++.h>

#define LL long long

typedef pair <int,int> pill;

using namespace std;

所以以下的LL指的就是long long 的数据类型。

并且pill 指的是2元整形容器pair<int,int>

 

目录:

一、读入优化

二、快速幂

三、Floyd算法

四、Dijkstra算法

五、Dijkstra算法的堆优化

六、欧几里得算法

七、扩展欧几里得

八、矩阵快速幂

九、ST表

一、读入优化    //读入数据的大小以MB作为单位的。

inline LL read(){
LL base=,flag=;
char ch='.';
while(ch>''||ch<''){
ch=getchar();
if(ch=='-') flag=-;
}
while(ch>=''&&ch<=''){
base=base*+ch-'';
ch=getchar();
};
return flag*base;
}

二、快速幂    //输出(x^k)%p的值,满足k非常大,n也非常大

inline LL quick_pow(LL x,LL k){
  LL base=;
  while(k){
    if(k&)  base=(base*x)%p;
    k>>=;
    x=(x*x)%p;
  }
  return base;
}

三、Floyd算法    //求所有的节点到每个节点的最短路的距离

inline void Floyd (){
memset(dis,0x3f,sizeof(dis));
for(int k=;k<=n;k++){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j];
}
}
}
return;
}

四、Dijkstra算法    //求n点到其他点的单源最短路径长度

inline void Dijkstra (int x){
int min=1e9+,place=;
dis[x]=;
memset(dis,0x3f,sizeof(dis));
memset(vis,false,sizeof(vis));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(!vis[j]&&dis[j]<min){
min=dis[j];
place=j;
}
}
if(place==)break;
vis[place]=true;
for(int j=head[place];j!=-;j=edge[j].next){
if(!vis[edge[j].to]&&dis[edge[j].to]>(edge[j].dis+dis[place])){
dis[edge[j].to]=edge[j].dis+dis[place];
}
}
}
return;
}

五、Dijkstra的堆优化    //求n点到其他点的单源最短路径长度

inline void Dijkstra (int x){
priority_queue<pill,vector<pill>,greater<pill> >q;
dis[s]=;
q.push(make_pair(dis[s],s));
while(!q.empty()){
pill temp=q.top();
q.pop();
numb=temp.second;
if(vis[numb])continue;
vis[numb]=;
for(int i=head[numb];i!=-;i=edge[i].next){
if(dis[edge[i].to]>dis[numb]+edge[i].dis){
dis[edge[i].to]=dis[numb]+edge[i].dis;
q.push(make_pair(dis[edge[i].to],edge[i].to));
}
}
}
return;
}

六、欧几里得算法    //求最大公约数

inline LL gcd(LL a,LL b){
if(a%b==)return b;
else return gcd(b,a%b);
}

七、扩展欧几里得    //在求最大公约数的同时求ax+by=gcd(a,b)的整数解

inline LL exgcd(LL a,LL b,LL &x,LL &y){
if(b==){
x=;
y=;
return a;
}
else{
ans=exgcd(b,a%b,x,y);
LL temp=x;
x=y;
y=temp-(a/b)*y;
return ans;
}
}

八、矩阵快速幂    //线性代数中比较重要的一课

struct Mat{
LL mat[][];
}
Mat operator *(Mat a,Mat b){
Mat c;
memset(c.mat,,sizeof(c.mat));
for(int k=;k<n;k++)
for(int i=;i<n;i++)
for(int j=;j<n;j++)
c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
return c;
}
void work(){
for(int i=;i<n;i++){
for(int j=;j<n;j++)
scanf("%lld",&x.mat[i][j]);
res.mat[i][i]=;
}
}
while(k){
if(k&) res=res*x;
k>>=;
x=x*x;
}
}

九、ST表    //灵活运用二进制进行加速的访问操作

inline void ST(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&f[i][]);
LOG[]=-; for(int i=;i<=n;i++)     LOG[i]=LOG[i/]+;
power[]=; for(int i=;i<=LOG[n];i++)   power[i]=power[i-]*;
for(int j=;j<=LOG[n];j++)
for(int i=;i<=n;i++)
if(i+power[j-]-<=n)
f[i][j]=max(f[i][j-],f[i+power[j-]][j-]);
return;
}

等待补充。。。。。。

 
 

【模板】OI常用模板(待补充)的更多相关文章

  1. IDEA学习——模板及其常用模板

    模板及其常用模板 (1)psvm (2)sout sout / soutp / soutv / 变量.sout (3)fori iter增强for循环 itar普通for循环 (4)list.for ...

  2. (长期更新)OI常用模板

    代码很简单的模板就不收录了. DFT 离散傅立叶变换 void dft(pdd *a,int l,bool r){ int i,j=l/2,k; for(i=1;i<l;++i){ if(i&l ...

  3. OI常用模板

    long long qpow(long long a,long long b,int mod) { ; while (b) { ) res=res*a%mod; a=a*a%mod; b>> ...

  4. OI 常用模板 手写

    线性筛素数 (例题 洛谷P3383) bool p[50000010]; int cnt = 0; int prime[10000010]; inline void init() { int N = ...

  5. NDK(10)Android.mk各属性简介,Android.mk 常用模板

    参考 : http://blog.csdn.net/hudashi/article/details/7059006 本文内容: Android.mk简介, 各属性表, 常用Android.mk模板 1 ...

  6. python MVC、MTV 框架介绍 Django 模板系统常用语法

    Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...

  7. spring boot ----> 常用模板freemarker和thymeleaf

    ===========================freemarker=================================== freemarker 官网:https://freem ...

  8. Vue常用模板语法

    常用模板语法   本篇将在上一篇的基础上记录文本渲染.表达式.过滤器以及常用指令的简单用法. 一.文本渲染 Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容.同时为了提高渲染效率,也支持只 ...

  9. phpcms v9模板制作常用代码集合(转)

    phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...

随机推荐

  1. react中数据持久化缓存redux-persist

    一.安装redux-persist: npm install redux-persist --save 二..babelrc中增加redux-persist配置: "plugins" ...

  2. HDU3085NightmareII题解--双向BFS

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3085 分析 大意就是一个男孩和一个女孩在网格里,同时还有两个鬼,男孩每轮走三步,女孩每轮走一步,与鬼曼 ...

  3. location(重定向,跳转到其他网页)

    <?php header('Location : https://www.baidu.com'); 这里是在响应头中添加一个 location 的头信息 客户端浏览器在接收到这个头信息过后会自动 ...

  4. 5.Hibernate 核心开发接口

    一.Configuration(AnnotationConfiguration) 作用:进行配置信息的管理 目标:用来产生SessionFactory 可以在configure 方法中指定hibern ...

  5. Google 开源的 Python 命令行库:初探 fire

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  6. systemd自启动tomcat

    tomcat自启动service [Unit] Description=Tomcat After=network.target [Service] Type=forking PIDFile=/usr/ ...

  7. Python tuple元组学习

    1.tuple和list非常类似,但是tuple一旦初始化就不能修改 classmates = ('Michael', 'Bob', 'Tracy') 现在,classmates这个tuple不能变了 ...

  8. 【获取url 问号后参数】防中文乱码

    function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  9. Python中关于csv的简单操作

    Python中关于csv的简单操作 CSV操作简单,直接import csv即可, 主要使用reader和pandas 1 reader的简单使用 csv.reader("1.csv&quo ...

  10. cypress 3

    https://blog.csdn.net/u014647208/article/details/80525226 https://blog.csdn.net/kulala082/article/de ...