【模板】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语言教程控件模板的模板绑定 控件模板的模板绑定 为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能.模板绑定允许控件模板中的控件将数据绑定到公共属性上. ...
随机推荐
- Java集合类初始容量、加载因子、扩容增量
当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...
- 《网络对抗》 逆向及Bof进阶实践
<网络对抗> 逆向及Bof进阶实践 实践目标 注入一个自己制作的shellcode并运行这段shellcode: 实践步骤 准备工作 root@5224:~# apt-get instal ...
- React Native集成Redux框架讲解与应用
学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理stat ...
- SQLMAP 使用手册
当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些数据 sqlmap支持五种不同的注入模式: ...
- 【原创】无线破解Aircrack-ng套件详解(一)--airmon-ng与airodump-ng
一:Aircrack-ng详解 1.1 Aircrack-ng概述 Aircrack-ng是一款用于破解无线802.11WEP及WPA-PSK加密的工具,该工具在2005年11月之前名字是Aircra ...
- Oracle imp 导入数据出现 ORA-12560
错误如下: D:\software\xfwebdb2015-05-11\autobackup>imp Import: Release 10.2.0.1.0 - Production on 星期三 ...
- PasswordHasher 算法
public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string provid ...
- Java中List集合的常用方法
List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来. 这篇文章就不讲继承Collection接口的那些方法了 https://www.cnblo ...
- java用servlet、cookie实现一个阅读记录
效果如图 代码1 package com.xiaostudy.servlet; import java.io.IOException; import java.io.PrintWriter; impo ...
- json-lib反序列化抽象属性及对象
使用json默认反序列化接口反序列化对象时,对象的类型必须的确定的,比如不能是抽象类型,否则会报无法实例化对象的异常 如有下列类定义: public abstract class AbstracObj ...