【模板】NOIP模板汇总
其他:
洛谷模板:a,b两个字符串,求b串在a串中出现的位置
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s1[],s2[];
int len1,len2,Next[];
int main(){
scanf("%s%s",s1+,s2+);
len1=strlen(s1+);len2=strlen(s2+);
for(int i=,k=;i<=len2;i++){
for(;s2[i]!=s2[k+]&&k>;k=Next[k]);
if(s2[i]==s2[k+])Next[i]=++k;
}
for(int i=,k=;i<=len1;i++){
for(;s1[i]!=s2[k+]&&k>;k=Next[k]);
if(s1[i]==s2[k+])++k;
if(k==len2)printf("%d\n",i-len2+),k=Next[k];
}
for(int i=;i<=len2;i++)printf("%d ",Next[i]);
return ;
}
KMP
洛谷模板:n个字符串求有几个不同的串
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<set>
#include<cstring>
using namespace std;
//#define mod 1e9+7//不能这样宏定义
const int mod=1e9+;
#define D 131
#define M 2333+7
long long n,g[M],f[M];
string s;
set<long long>t;
void predeal(int x){
f[]=s[];
for(int i=;i<=x;i++)
f[i]=(1LL*f[i-]*D+s[i-])%mod;
g[]=;
for(int i=;i<=x;i++)
g[i]=1ll*g[i-]*D%mod;
}
int Hash(int l,int r){
long long a=f[r],b=1LL*f[l-]*g[r-l+]%mod;
return (a-b+mod)%mod;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++){
cin>>s;
long long len=s.length();
predeal(len);
long long k=Hash(,len);
t.insert(k);
}
printf("%lld\n",t.size());
return ;
}
hash
洛谷模板:最长回文串
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=1e7+;
char s[maxn*],str[maxn*];
int Len[maxn*],len; void getstr()
{
int k=;
str[k++]='$';
for(int i=;i<len;i++)
str[k++]='#',
str[k++]=s[i];
str[k++]='#';
len=k;
}
void Manacher()
{
getstr();
int mx=,id;
for(int i=;i<len;i++)
{
if(mx>i) Len[i]=min(Len[*id-i],mx-i);
else Len[i]=;
while(str[i+Len[i]]==str[i-Len[i]])
Len[i]++;
if(Len[i]+i>mx)
mx=Len[i]+i,id=i;
}
}
int main()
{
scanf("%s",&s);
len=strlen(s);
Manacher();
int ans=;
for(int i=;i<len;i++) ans=max(ans,Len[i]);
printf("%d\n",ans-);
return ;
}
Manacher
洛谷模板:快速排序
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n,a[],tmp[]; void merge_sort(int l,int r){
if(l==r)return;
int mid=(l+r)>>;
merge_sort(l,mid);
merge_sort(mid+,r);
int ii=l,jj=mid+,k=l;
while(ii<=mid&&jj<=r){
if(a[ii]<a[jj])tmp[k++]=a[ii++];
else tmp[k++]=a[jj++];
}
while(ii<=mid)tmp[k++]=a[ii++];
while(jj<=r)tmp[k++]=a[jj++];
for(int i=l;i<=r;i++)a[i]=tmp[i];
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
merge_sort(,n);
for(int i=;i<=n;i++)cout<<a[i]<<" ";
return ;
}
归并排序
洛谷模板:Lucas定理
给定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105)
求C(n+m,m)
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std; int T;
LL n,m,p,f[]; void pre(){
f[]=;
for(int i=;i<=p;i++)f[i]=f[i-]*i%p;
} LL ksm(LL x,LL y){
LL ret=%p;
while(y){
if(y&)ret=ret*x%p;
x=x*x%p;
y>>=;
}
return ret;
} LL C(LL n,LL m){
if(m>n)return ;//*******
return f[n]*ksm(f[m],p-)%p*ksm(f[n-m],p-)%p;
} LL Lucas(LL n,LL m){
if(!m)return ;
return C(n%p,m%p)*Lucas(n/p,m/p)%p;
} int main(){
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&n,&m,&p);
pre();
printf("%lld\n",Lucas(n+m,m)%p);
}
return ;
}
Lucas
洛谷模板:ST表
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int f[][];
int n,m,a,b;
int query(int l,int r){
int k=log(r-l+)/log();
return max(f[l][k],f[r-(<<k)+][k]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&f[i][]);
for(int i=;i<=;i++)
for(int j=;j+(<<i)-<=n;j++)
f[j][i]=max(f[j][i-],f[j+(<<(i-))][i-]);
for(int i=;i<=m;i++){
scanf("%d%d",&a,&b);
printf("%d\n",query(a,b));
}
}
ST
洛谷模板:矩阵快速幂
#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 1000000007
using namespace std;
int n;
struct matrix{
long long m[][];
}A;
matrix mul(matrix a,matrix b){
matrix t;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
t.m[i][j]=;
for(int k=;k<=n;k++){
t.m[i][j]=(t.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
}
}
}
return t;
}
matrix fast_mul(matrix a,long long k){
matrix ret=a,now=a;
k--;
while(k){
if(k&)ret=mul(ret,now);
now=mul(now,now);
k>>=;
}
return ret;
}
long long k;
int main(){
scanf("%d%lld",&n,&k);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&A.m[i][j]);
A=fast_mul(A,k);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
printf("%lld ",A.m[i][j]);
printf("\n");
}
return ;
}
矩阵快速幂
洛谷模板:乘法逆元
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 3000010
using namespace std;
int n,p;
int inv[MAXN];
int main(){
scanf("%d%d",&n,&p);
inv[]=;
printf("1\n");
for(int i=;i<=n;i++){
inv[i]=(p-p/i)*1ll*inv[p%i]%p;
printf("%d\n",inv[i]);
}
}
乘法逆元 线性
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std; int n,p; LL ksm(LL x,LL y){
int ret=;
while(y){
if(y&)ret=1LL*ret%p*x%p;
x=x*x%p;
y>>=;
}
return ret%p;
} int main(){
scanf("%d%d",&n,&p);
for(int i=;i<=n;i++){
printf("%lld\n",ksm(i,p-)%p);
}
return ;
}
费马小定理
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n,p; void exgcd(int a,int b,int &x,int &y){
if(b==){
x=;y=;
return;
}
exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
} int main(){
scanf("%d%d",&n,&p);
for(register int i=;i<=n;i++){
int x,y;
exgcd(i,p,x,y);
printf("%d\n",(x+p)%p);
}
return ;
}
扩展欧几里得
后两个在洛谷T一个点
经典算法:
希望看到有漏下的重要考点能够提出来
感谢
【模板】NOIP模板汇总的更多相关文章
- NOIP模板总结
NOIP模板总结 进考场先打一份缺省源: # include <cstdio> # include <iostream> # include <cstring> # ...
- Freemaker基于word模板动态导出汇总整理
Freemaker基于word模板动态导出汇总整理 一.使用的jar包: 二.Word模板动态导出的基本思路: 1.首先通过自己在word中创建好需要导出的word文本+表格的模板,模板中需要填写内容 ...
- C++:类模板与模板类
6.3 类模板和模板类 所谓类模板,实际上是建立一个通用类,其数据成员.成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表.使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从 ...
- C++:函数模板与模板函数
6.1 模板的概念 C++允许用同一个函数定义函数,这些函数的参数个数和参数类型不同.例如求最大值的max函数, int max(int x,int y) { return (x>y ...
- C++ template学习一(函数模板和模板函数)
函数模板和模板函数(1)函数模板函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:templat ...
- vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板)
vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板): Customizing ASP.NET MVC 5/Web API 2 Scaffoldi ...
- C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化
模板类模板成员函数(member function template)隐式处理(implicit)变化 本文地址: http://blog.csdn.net/caroline_wendy/articl ...
- .NET/ASP.NETMVC Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)
.NET/ASP.NETMVC Model元数据.HtmlHelper.自定义模板.模板的装饰者模式(一) 阅读目录: 1.开篇介绍 2.Model与View的使用关系(数据上下文DataContex ...
- C++类模板和模板类
C++ 中有一个重要特性,那就是模板类型.类似于Objective-C中的泛型.C++通过类模板来实现泛型支持. 1 基础的类模板 类模板,可以定义相同的操作,拥有不同数据类型的成员属性. 通常使用t ...
- Xamarin XAML语言教程控件模板的模板绑定
Xamarin XAML语言教程控件模板的模板绑定 控件模板的模板绑定 为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能.模板绑定允许控件模板中的控件将数据绑定到公共属性上. ...
随机推荐
- Python3.x:pyodbc连接Sybase数据库操作(Windows系统下DNS模式)
Python3.x:pyodbc连接Sybase数据库操作(Windows系统下DNS模式) 一.安装模块pyodbc pip install pyodbc 二.配置odbc数据源 (1).windo ...
- Refseq,accssion #,gi ,Ensembl的关系
accession编号的分子类型代号: Ensembl是2000年就开始开发的基因组自动注释软件,起初是只对真核生物基因组,2009年后开始对植物,细菌等开放.既然要注释,就要有注释对象(基因,转录本 ...
- apache性能测试工具ab
性能测试工具目前最常见的有以下几种:ab.http_load.webbench.siege ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可 ...
- Oracle 事务处理
事务的四大特性 1.原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的. 2.一致性(Consistency) 一致性是指数据库在事务操作前和事 ...
- [BZOJ1257]余数之和
Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k mod i表示k除以i的余数. 例如j(5 ...
- 移动端给img元素添加content: "";
误给img原始添加 content: "";属性后发现在ios系统中图片是不会显示的android系统是正常的
- JQuery -- Validate, Jquery 表单校验
1. Jquery 表单验证需要插件 jQuery validation 1.7 ---验证插件需要:jQuery 1.3.2 或 1.4.2版本 http://jquery.bassistance ...
- JavaWeb -- Struts 数据传输:OGNL和类型转换
1. 数据传输:OGNL和类型转换 OGNL和struts2 OGNL:Object-Graph Navigation Language. OGNL是集成进struts框架中比较强大的技术有助于数据传 ...
- Remove Duplicates from Sorted List ,除去链表中相邻的重复元素
Remove Duplicates from Sorted List : Given a sorted linked list, delete all duplicates such that eac ...
- yii2:不使用composer安装yii2-jui的方法
今天有一个功能需要用到autocomplete,既然用yii2开发,在这里当然使用它自带的yii2-jui中的autocomplete组件了.yii2basic版默认是没有yii2-jui组件的,需要 ...