【模板】OI常用模板(待补充)
//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常用模板(待补充)的更多相关文章
- IDEA学习——模板及其常用模板
模板及其常用模板 (1)psvm (2)sout sout / soutp / soutv / 变量.sout (3)fori iter增强for循环 itar普通for循环 (4)list.for ...
- (长期更新)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 ...
- OI常用模板
long long qpow(long long a,long long b,int mod) { ; while (b) { ) res=res*a%mod; a=a*a%mod; b>> ...
- OI 常用模板 手写
线性筛素数 (例题 洛谷P3383) bool p[50000010]; int cnt = 0; int prime[10000010]; inline void init() { int N = ...
- NDK(10)Android.mk各属性简介,Android.mk 常用模板
参考 : http://blog.csdn.net/hudashi/article/details/7059006 本文内容: Android.mk简介, 各属性表, 常用Android.mk模板 1 ...
- python MVC、MTV 框架介绍 Django 模板系统常用语法
Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...
- spring boot ----> 常用模板freemarker和thymeleaf
===========================freemarker=================================== freemarker 官网:https://freem ...
- Vue常用模板语法
常用模板语法 本篇将在上一篇的基础上记录文本渲染.表达式.过滤器以及常用指令的简单用法. 一.文本渲染 Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容.同时为了提高渲染效率,也支持只 ...
- phpcms v9模板制作常用代码集合(转)
phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...
随机推荐
- Win32汇编语言语法基础
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地 ...
- 美团2017年CodeM大赛-初赛A轮 C合并回文子串
区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...
- hdu 6025(女生赛)
典型的用空间换取时间的思想 关键要理解多个数怎么算最小公倍数 用一个前缀 一个后缀 然后枚举去掉的点就可以了 #include <iostream> #include <cstdio ...
- pat L2--005 简单复习一下并差集
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...
- 进阶Java编程(3)线程的同步与死锁
线程的同步与死锁 1,同步问题引出 在多线程的处理之中,可以利用Runnable描述多个线程操作的资源,而Thread描述每一个线程对象,对于当多个线程访问统一资源的时候如果处理不当就会产生数据的错误 ...
- 【原创】大叔经验分享(71)docker容器中使用jvm工具
java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只 ...
- luogu题解P2312解方程--暴力模+秦九韶
题目链接 https://www.luogu.org/problemnew/show/P2312 分析 这道题很毒啊,这么大的数. 但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\) ...
- Java对象的序列化和反序列化介绍
一.什么序列化和反序列化以及作用: java序列化是指把java对象转换为字节序列的过程,而java反序列化是指把字节序列恢复为java对象的过程 1.序列化: 1)对象序列化的最主要的用处就是在传递 ...
- java技术面试之面试题大全
转载自:http://blog.csdn.net/lijizhi19950123/article/details/77679489 Java 面试知识点总结 本篇文章会对面试中常遇到的Java技术点进 ...
- Python脚本带-的参数脚本
一.故事背景 由于先前的工作内容是做后台开发,对于脚本写的很少: 昨天参加面试遇到一道面试题,写一个python脚本: 通过脚本的后面的参数选项获取参数选项后面的字符串进行处理: 问题没记错的话大概是 ...