【模板】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语言教程控件模板的模板绑定 控件模板的模板绑定 为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能.模板绑定允许控件模板中的控件将数据绑定到公共属性上. ...
随机推荐
- Apache 优化
1.关闭DNS和名字解析 * HostnameLookups on | off | double 2.关闭客户端主机名解析 Apache .3之前HostnameLookups默认是打开的.这样客户端 ...
- WIN7下PHP无法开启CURL,终极解决方案
常规做法: 1)extension=php_curl.dll之外 2)把libeay32.dll.ssleay32.dll.php_curl.dll复制到C:\Windows\SysWOW64目录下 ...
- 【转载】User notification 的实现方法
原帖请看:http://cocoathings.blogspot.com/2013/01/introduction-to-user-notifications-in.html 想要实现如图这样的not ...
- <关于并发框架>Java原生线程池原理及Guava与之的补充
原创博客,转载请联系博主! 转眼快两个月没有更新自己的博客了. 一来感觉自己要学的东西还是太多,与其花几个小时写下经验分享倒不如多看几点技术书. 二来放眼网上已经有很多成熟的中文文章介绍这些用法,自己 ...
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
- 【P2944】地震损失(最大流,洛谷)
绝对难度虚高的一题 看到题目,至少损坏几个房子,开始考虑最小割,建的是双向边,所以拆点,边权除了自己与自己的之外都连inf.然后把所有求救的点都连到超级源上,跑一遍最大流就可以了. #include& ...
- JNIjw03
1.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_JNIjw03.h" JNIEXPORT void JNICALL ...
- Android报错Type Error executing aapt: Return code -1 - HTTP 500
我的做法是(乱蒙对的) 把menu.xml干掉!,对的你没看错! 当然其他人方案:如下 1.http://stackoverflow.com/questions/10699439/aapt-filin ...
- 遇到不确定的json格式
我们在调用webservice接口,或者http接口时,返回的json数据,有时候会因为情况不同,返回的数据格式也不一样. 比如我在调用增加档案接口时,传入要添加的档案id,如果成功了,success ...
- 客户端类中中记录异常的方法: 使用Log4net
1.首先引用Log4Net 的命名空间 using log4net; 2.在使用的类中生命静态变量 log public class FileService { static re ...