//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. L1-064 估值一亿的AI核心代码 (20 分)

    L1-064 估值一亿的AI核心代码 (20 分)   以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: ...

  2. 【动态规划】subsequence 1

    题目链接:https://ac.nowcoder.com/acm/contest/885/G 题意: 两个串,s  t,求s的所有子串中大于 t  的数目 题解: dp[i][j] 表示 s的前i个, ...

  3. Spring 的 Bean 管理(XML 方式)

    Spring 的 Bean 管理(XML 方式) 1. 三种实例化 Bean 的方式 使用类构造器实例化(默认无参数) 使用静态工厂方法实例化(简单工厂模式) 使用实例工厂方法实例化(工厂方法模式) ...

  4. java——多线程知识点大总结

    1:理解线程的概念之前,我们有必要先理解一下进程的概念 程序(Program)是为实现特定目标或解决特定问题而用计算机语言(比如Java语言)编写的命令序列的集合. 进程指一个程序的一次执行过程   ...

  5. winfrom 点击按钮button弹框显示颜色集

    1.窗体托一个按钮button: 2.单击事件: private void btnForeColor_Click(object sender, EventArgs e) { using (ColorD ...

  6. JavaScript例子1-给网页中所有<p>元素添加onclick事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. loj 3014「JOI 2019 Final」独特的城市

    loj 我本来是直接口胡了一个意思一样的做法的,但是因为觉得有点假+实现要用并查集(?)就卡了好一会儿... 对于一个点\(x\)来说,独特的点一定在它的最长链上,如果有独特的点不在最长链上,那么最长 ...

  8. Java Jersey的详情概述

    Jersey是一个RESTFUL请求服务JAVA框架,与常规的JAVA编程使用的struts框架类似,它主要用于处理业务逻辑层. 与springmvc 的区别: 1. jersey同样提供DI,是由g ...

  9. 转:idea类名出现了不同的颜色

    转:https://blog.csdn.net/yf_mood/article/details/88191818 在安装了git以后发现idea类名出现了不同的颜色,如下: 它们分别表示的含义: 绿色 ...

  10. HTML5之历史记录(实现的当页面应用路由器的底层)

    history hashchange与popstate 一.history history.back():加载history列表中的前一个URL history.forward():加载history ...