【模板】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 ...
随机推荐
- java进程CPU高分析
JVM导致系统CPU高的常见场景: 内存不足,JVM gc频繁,一般会伴随OOMJVM某个线程死循环或者递归调用 定位和解决1.内存不足,gc频繁可参考我的这遍文章解决.https://blog.cs ...
- MYSQL---触发器简单了解
触发器 trigger 1.触发器是指事先为某张表绑定一段代码,当表中某些内容发生改变(增insert.删delete.改update)时,系统自动触发绑定的那段代码并执行.比如 一旦订单表里插入新订 ...
- T100——自动执行设置了但没执行
azzi950设置了背景定时执行,但到底没执行, 重启的命令如下.三个命令都执行一下.指令 1: r.r azzp950 kill 指令 2: r.r azzp951 kill 指令 3: r.r a ...
- postpreSQL和oracle数据库的递归
oracle: --包含自身 select * from sec_org start with org_id ='9767FA56D52680AEE043C0A8670580AE' --开始节点 co ...
- tomcat 虚拟目录 连接池
- asp.net 8 Request,Response,Server
Request成员: 1.Request.UrlReferrer 获取请求的来源,可以防盗链 Response.Write(Request.Url.ToString());//获取当前请求的URL地址 ...
- 无障碍开发(四)之ARIA aria-***状态值
aria-***状态值
- 林大妈的CSS知识清单(二)可见格式化模型(内含margin塌陷与浮动闭合的解决方案)
盒模型.浮动和定位是CSS中最重要的三个概念.它们共同决定了一个元素在页面中以怎样的形式进行排布与显示. 一.盒模型 1. 定义 盒模型是CSS的核心概念.一个页面中,所有的元素(不管他最终显示是圆形 ...
- plist文件的归档,解档
plist文件 plist的根Type只能是字典(NSDictionary)或者是数组(NSArray)所以归档时我们只能将数组或字典保存到plist文件中,但是NSString也能通过归档保存到pl ...
- jvm监控工具jconsole进行远程监控配置
[环境] SUSE linux11 + jdk1.6 + tomcat7 [场景] 最近在做性能测试,想通过我本地(win7)上的jdk来远程监控上述服务器的jvm相关信息. [配置] 配置上述服务器 ...