分块+莫队

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
/*分块*/
#include<cmath>
const int N=;
int pos[N],n,blk;
void fenkuai(){
scanf("%d",&n);
blk=(int)(double(n));
for(int i=;i<=n;i++) pos[i]=(i-)/blk+;
}
/*莫队*/
int ans=;
struct qujian{
int le,ri,ans;
}q[N];
bool cmp(const qujian &a,const qujian &b){
return pos[a.le]<pos[b.le]||(pos[a.le]==pos[b.le]&&a.ri<b.ri);
}
void update(int pos,int val){
}
void modui(){
scanf("%d",&n);
fenkuai();
for(int i=;i<=n;i++) scanf("%d%d",&q[i].le,&q[i].ri);
sort(q+,q+n+,cmp);
int le,ri;
le=ri=;
for(int i=;i<=n;i++){
while(ri>q[i].ri){
update(ri,-);
ri--;
}
while(ri<q[i].ri){
update(ri+,);
ri++;
}
while(le<q[i].le){
update(le,-);
le++;
}
while(le>q[i].le){
update(le-,);
le--;
}
q[i].ans=ans;
}
/*...*/
}

分块+莫队

字符串:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=; /*kmp*/
int lens,lenp,nxt[N];
char s[N],p[N];
void get_nxt(){
int i=,j=-;
nxt[]=-;
while(i<lenp){
if(j==-||p[i]==p[j]){
i++,j++;
nxt[i]=j;
}
else j=nxt[j];
}
}
void kmp(){
int i=,j=;
while(i<lens){
if(j==-||s[i]==p[j]){
i++,j++;
if(j==lenp){
/*success*/
j=nxt[j];
}
}
else j=nxt[j];
}
}
int main(){
scanf("%s%s",s,p);
lens=strlen(s),lenp=strlen(p);
get_nxt();
kmp();
return ;
} /*manacher*/
int pal[N];
void fixs(){
/* "aba" -> "-#a#b#a#+" */
}
void manacher(){
int id,mx=;
for(int i=;i<=lens;i++){
if(mx>=i) pal[i]=min(pal[*id-i],mx-i+);
//else pal[i]=1;
while(s[i+pal[i]]==s[i-pal[i]]) pal[i]++;
if(pal[i]>mx) mx=pal[i],id=i;
}
}
int main(){
scanf("%s",s);
lens=strlen(s);
fixs();
manacher();
return ;
}

kmp+manacher

数据结构

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=; /*左偏树(大根堆) + 并查集(路径压缩) */
int n,fa[N];
struct node{
int ls,rs;
int dis,key;
}tr[N];
int getfa(int x){
if(fa[x]==x) return x;
return fa[x]=getfa(fa[x]);
}
int merge(int a,int b){
if(a==) return b;
if(b==) return a;
if(tr[a].key<tr[b].key) swap(a,b);
tr[a].rs=merge(tr[a].rs,b);
if(tr[tr[a].ls].dis<tr[tr[a].rs].dis) swap(tr[a].ls,tr[a].rs);
tr[a].dis=tr[tr[a].rs].dis+;
return a;
}
int del(int a){
int tmp=merge(tr[a].ls,tr[a].rs);
fa[getfa(a)]=tmp;
fa[fa[getfa(a)]]=tmp;
return tmp;
}
int main(){
tr[].dis=-,tr[].key=;//(small heap)tr[0].key=INF;
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&tr[i].key);
for(int i=;i<=n;i++) fa[i]=i;
int q,opt,x,y;
scanf("%d",&q);
while(q--){
scanf("%d",&opt);
if(opt==){
scanf("%d%d",&x,&y);
if(getfa(x)==getfa(y)) continue;
int tmp=merge(getfa(x),getfa(y));
fa[getfa(x)]=fa[getfa(y)]=tmp;
printf("%d\n",tmp);
}
else{
scanf("%d",&x);
printf("%d\n",del(getfa(x)));
}
}
return ;
}

可并堆(左偏树)

#include<queue>
struct cmp{
bool operator()(const Type &_a,const Type &_b){
return _a>_b;//小根堆
}
};
priority_queue<Type,vector<Type>,cmp> q;

优先队列STL(堆)

图论

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=+;
/*dijkstra(spfa)+heap(曾一直以为是spfa)*/
int s=,n,m,dis[N];
bool exi[N];
int head[N],to[N*],val[N*],nxt[N*],hh=;
struct cmp{
bool operator()(const int &a,const int &b){
return dis[a]>dis[b];
}
};
priority_queue<int,vector<int>,cmp> q;
void spfa(){
memset(dis,0x3f,sizeof(dis));
memset(exi,,sizeof(exi));
while(!q.empty()) q.pop();
dis[s]=,exi[s]=;
q.push(s);
while(!q.empty()){
int u=q.top();q.pop();
exi[u]=;
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
if(dis[v]>dis[u]+val[i]){
dis[v]=dis[u]+val[i];
if(!exi[v]){
q.push(v);
exi[v]=;
}
}
}
}
}
void adde(int a,int b,int v){
hh++;
to[hh]=b;
val[hh]=v;
nxt[hh]=head[a];
head[a]=hh;
}
int main(){
scanf("%d%d",&n,&m);
int u,v,w;
for(int i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
adde(u,v,w),adde(v,u,w);
}
spfa();
for(int i=;i<=n;i++) printf("%d ",dis[i]);
return ;
}

dijkstra+heap

bool find(int u){
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
if(vis[v]) continue;
vis[v]=;
if(bl[v]==||find(bl[v])){
bl[v]=u;
return true;
}
}
return false;
}
int main(){
/*...*/
int cnt=;
for(int i=;i<=n;i++){
memset(vis,,sizeof(vis));//可用时间戳优化
if(find(i)) cnt++;
}
/*...*/
}

匈牙利算法

数论

int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
void exgcd(int a,int b,int &x,int &y){
if(b==){
x=,y=;return;
}
int x0,y0;
exgcd(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
}

gcd+exgcd

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=; /*线性筛(莫比乌斯函数+欧拉函数)*/
int n;
int prime[N],cntp,phi[N],mui[N];
bool notp[N];
void init(){
notp[]=;
phi[]=,mui[]=;
for(int i=;i<=n;i++){
if(!notp[i]){
prime[++cntp]=i;
phi[i]=i-;
mui[i]=-;
}
for(int j=;j<=cntp&&i*prime[j]<=n;j++){
if(i%prime[j]==){
phi[i*prime[j]]=phi[i]*prime[j];
mui[i*prime[j]]=;
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-);
mui[i*prime[j]]=-mui[i];
notp[i*prime[j]]=;
}
}
} /*高斯消元*/
#include<cmath>
const double eps=1e-;
int n,m;//n项 m方程
double g[N][N],ans[N];
void gauss(){
int cnt=;
for(int k=;k<=n;k++){//第k列
int j=-;
for(int i=cnt+;i<=m;i++) if(fabs(g[i][k])>eps){
j=i;break;
}
if(j==-) continue;
for(int i=;i<=n+;i++) swap(g[cnt+][i],g[j][i]);
for(j=;j<=m;j++){
if(j==cnt+) continue;//!
if(fabs(g[j][k])<eps) continue;
double r=g[j][k]/g[cnt+][k];
for(int i=;i<=n+;i++)
g[j][i]-=r*g[cnt+][i];
}
cnt++;
}
for(int i=cnt+;i<=m;i++){
if(fabs(g[i][n+])>eps)
printf("no solution!\n");
}
if(cnt<n){
printf("more than one solution!\n");
return;
}
for(int i=;i<=cnt;i++)
ans[i]=g[i][n+]/g[i][i];
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
for(int j=;j<=n+;j++) scanf("%lf",&g[i][j]);
gauss();
for(int i=;i<=n;i++) printf("%.2lf ",ans[i]);
return ;
}

线性筛(基本积性函数)+高斯消元

Type power(Type a,Type b){
Type rt=;
for(;b;b>>=,a=a*a%mod) if(b&) rt=rt*a%mod;
return rt;
}

快速幂

dp

int dfs(int pos,/*int some_ifo,*/bool limit/*,bool zero*/){
if(pos==) return ;
if((!limit)/*&&(!zero)*/&&f[pos]!=-) return f[pos];
int st=limit?k[pos]:;
int ans=;
for(int i=;i<=st;i++){
/*if(some_limit)*/ ans+=dfs(pos-,/**/,limit&&i==st/*,zero&&i==0*/);
}
if((!limit)/*&&(!zero)*/) f[pos]=ans;
return ans;
}

数位dp

高精度

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N=+; struct Type{
int a[N],len;
};
void read(Type &res){
char ch=;
res.a[]=,res.len=;
while(ch<''||ch>''){if(ch=='-')res.a[]=-;ch=getchar();}
while(ch>=''&&ch<=''){res.a[++res.len]=ch-'';ch=getchar();}
for(int i=;i<=res.len/;i++) swap(res.a[i],res.a[res.len-i+]);
}
void print(const Type &pr){
if(pr.a[]==-) printf("-");
for(int i=pr.len;i>=;i--) printf("%d",pr.a[i]);
}
Type operator +(Type _a,Type _b){
Type _c;
_c.len=max(_a.len,_b.len);
int tmp=;
for(int i=;i<=min(_a.len,_b.len);i++){
tmp=_a.a[i]+_b.a[i]+tmp;
_c.a[i]=tmp%;
tmp/=;
}
for(int i=min(_a.len,_b.len)+;i<=_c.len;i++){
tmp=_a.len>_b.len?_a.a[i]+tmp:_b.a[i]+tmp;
_c.a[i]=tmp%;
tmp/=;
}
if(tmp) _c.a[++_c.len]=tmp;
return _c;
}
Type operator -(Type _a,Type _b){
Type _c;
_c.len=_a.len;
for(int i=;i<=_b.len;i++){
_c.a[i]=_a.a[i]-_b.a[i];
if(_c.a[i]<) _c.a[i]+=,_a.a[i+]--;
}
for(int i=_b.len+;i<=_a.len;i++) _c.a[i]=_a.a[i];
while(_c.a[_c.len]==) _c.len--;
return _c;
}
Type a,b;
int main(){
read(a),read(b);
print(a-b);
return ;
}

高精度加减

【模板(们)】noip前热身练习(更新中...)的更多相关文章

  1. 前端面试题总结——HTML(持续更新中)

    前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WE ...

  2. Noip前的大抱佛脚----图论

    目录 图论 知识点 二分图相关 DFS找环 并查集维护二分图 二分图匹配的不可行边 最小生成树相关 最短路树 最短路相关 负环 多源最短路 差分约束系统 01最短路 k短路 网络流 zkw费用流 做题 ...

  3. 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

    Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...

  4. Noip前的大抱佛脚----Noip真题复习

    Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...

  5. Noip前的大抱佛脚----数论

    目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...

  6. vue中的一些用法,持续更新中......

    1.跳转用法 @1.在template模板中通常使用router-link to='url' @2.在js中 1.this.$router.push({path: ''/order/index''}) ...

  7. 【前端面试】Vue面试题总结(持续更新中)

    Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...

  8. 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY

    正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade   随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...

  9. [Linux] Linux指令汇总(持续更新中...)

    写在前面: 以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛.如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学L ...

随机推荐

  1. js_setCookie,getCookie和checkcookie函数

    随便说说: cookie和sessionStrong,localStrong在web应用中都有一种存储的功能,也就是说可以把一些数据记录在浏览器.cookie和后两者的主要区别 是cookie是和后端 ...

  2. 线程,JSP,Servlet面试题

    线程编程方面 60.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runna ...

  3. 【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记

    Coursera课程<Using Python to Access Web Data > 密歇根大学 Charles Severance Week2 Regular Expressions ...

  4. Linux 内核同步之自旋锁与信号量的异同【转】

    转自:http://blog.csdn.net/liuxd3000/article/details/8567070 Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导 ...

  5. linux驱动基础系列--Linux下Spi接口Wifi驱动分析

    前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 .主要是想对spi接口的wifi驱动框架有一个整体的把 ...

  6. git学习笔记三

    1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...

  7. mac下谷歌chrome浏览器的快捷键

    1. 标签页和窗口快捷键 ⌘-N 打开新窗口. ⌘-T 打开新标签页. ⌘-Shift-N 在隐身模式下打开新窗口. 按 ⌘-O,然后选择文件. 在 Chrome 浏览器中打开计算机中的文件. 按住  ...

  8. How To Install Nginx on Ubuntu 16.04 zz

    Introduction Nginx is one of the most popular web servers in the world and is responsible for hostin ...

  9. sql server 2008 R2连接失败 错误:18456

    这种问题的解决方法: 第一步:以windows验证模式进入数据库管理器. 第二步:在对新资源管理器中右击实例名称选择属性,弹出服务器属性对话框,我们在左侧栏选择[安全性]选项卡,选中”SQL Serv ...

  10. python 单例模式4中实现方法

    python实现单例模式的方法: 1. 使用模块 python的模块在第一次导入时会生成.pyc文件,当第二次导入时就会直接加载.pyc文件,而不会再次执行模块代码. 只需将其单独放在一个模块里,并创 ...