//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. java进程CPU高分析

    JVM导致系统CPU高的常见场景: 内存不足,JVM gc频繁,一般会伴随OOMJVM某个线程死循环或者递归调用 定位和解决1.内存不足,gc频繁可参考我的这遍文章解决.https://blog.cs ...

  2. MYSQL---触发器简单了解

    触发器 trigger 1.触发器是指事先为某张表绑定一段代码,当表中某些内容发生改变(增insert.删delete.改update)时,系统自动触发绑定的那段代码并执行.比如 一旦订单表里插入新订 ...

  3. T100——自动执行设置了但没执行

    azzi950设置了背景定时执行,但到底没执行, 重启的命令如下.三个命令都执行一下.指令 1: r.r azzp950 kill 指令 2: r.r azzp951 kill 指令 3: r.r a ...

  4. postpreSQL和oracle数据库的递归

    oracle: --包含自身 select * from sec_org start with org_id ='9767FA56D52680AEE043C0A8670580AE' --开始节点 co ...

  5. tomcat 虚拟目录 连接池

  6. asp.net 8 Request,Response,Server

    Request成员: 1.Request.UrlReferrer 获取请求的来源,可以防盗链 Response.Write(Request.Url.ToString());//获取当前请求的URL地址 ...

  7. 无障碍开发(四)之ARIA aria-***状态值

    aria-***状态值

  8. 林大妈的CSS知识清单(二)可见格式化模型(内含margin塌陷与浮动闭合的解决方案)

    盒模型.浮动和定位是CSS中最重要的三个概念.它们共同决定了一个元素在页面中以怎样的形式进行排布与显示. 一.盒模型 1. 定义 盒模型是CSS的核心概念.一个页面中,所有的元素(不管他最终显示是圆形 ...

  9. plist文件的归档,解档

    plist文件 plist的根Type只能是字典(NSDictionary)或者是数组(NSArray)所以归档时我们只能将数组或字典保存到plist文件中,但是NSString也能通过归档保存到pl ...

  10. jvm监控工具jconsole进行远程监控配置

    [环境] SUSE linux11 + jdk1.6 + tomcat7 [场景] 最近在做性能测试,想通过我本地(win7)上的jdk来远程监控上述服务器的jvm相关信息. [配置] 配置上述服务器 ...