NOIP 前夕 模板整理
归并排序:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[],s[],n;
void megre_sort(int l,int r)
{
if(l==r) return ;
int mid=(l+r)/;
megre_sort(l,mid);megre_sort(mid+,r);
int i=l,j=mid+,k=l;
while(i<=mid&&j<=r)
{
if(a[i]<=a[j])
s[k++]=a[i++];
else
s[k++]=a[j++];
}
while(i<=mid)
s[k++]=a[i++];
while(j<=r)
s[k++]=a[j++];
for(int i=;i<=r;i++)
a[i]=s[i];
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
megre_sort(,n);
for(int i=;i<=n;i++)
printf("%d ",a[i]);
return ;
}
高精度:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[],b[],c[],len1,len2;
char s1[],s2[],s3[];
void add()
{
for(int i=;i<len1;i++)
a[len1-i]=s1[i]-'';
for(int i=;i<len2;i++)
b[len2-i]=s2[i]-'';
int lenc=,x=;
while(lenc<=len1||lenc<=len2)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/;
c[lenc]%=;
lenc++;
}
c[lenc]=x;
if(c[lenc]==)
lenc--;
for(int i=lenc;i>=;i--)
cout<<c[i];
cout<<endl;
}
void jian()
{
memset(c,,sizeof(c));memset(a,,sizeof(a));memset(b,,sizeof(b));
if(strlen(s1)<strlen(s2)||((strlen(s1)==strlen(s2))&&strcmp(s1,s2)<))
{
strcpy(s3,s1);strcpy(s1,s2);strcpy(s2,s3);
cout<<'-';
}
len1=strlen(s1);len2=strlen(s2);
for(int i=;i<len1;i++)
a[len1-i]=s1[i]-'';
for(int i=;i<len2;i++)
b[len2-i]=s2[i]-'';
int lenc=;
while(lenc<=len1||lenc<=len2)
{
if(a[lenc]<b[lenc])
{
a[lenc]+=;a[lenc+]--;
}
c[lenc]=a[lenc]-b[lenc];
lenc++;
}
while(c[lenc]==&&lenc>)
lenc--;
for(int i=lenc;i>=;i--)
cout<<c[i];
cout<<endl;
}
void cheng()//高精乘
{
for(int i=;i<len1;i++)
a[len1-i]=s1[i]-'';
for(int i=;i<len2;i++)
b[len2-i]=s2[i]-'';
memset(c,,sizeof(c));
for(int i=;i<=len1;i++)
{
int x=;
for(int j=;j<=len2;j++)
{
c[i+j-]=a[i]*b[j]+x+c[i+j-];
x=c[i+j-]/;
c[i+j-]%=;
}
c[i+len2]=x;
}
int lenc=len1+len2;
while(c[lenc]==&&lenc>) lenc--;
for(int i=lenc;i>=;i--)
printf("%d",c[i]);
printf("\n");
}
int main()
{
gets(s1);gets(s2);
len1=strlen(s1);len2=strlen(s2);
add();
jian();
cheng();
return ;
}
二分答案:
跳石头
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int l;
int n,m,a[];
int check(int x)
{
int k=,last=;
for(int i=;i<=n;i++)
{
if(a[i]-last<x)
k++;
else
last=a[i];
}
if(k>m) return ;
else return ;
}
int main()
{
scanf("%d%d%d",&l,&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
n++;a[n]=l;
int left=,right=l,mid;
while(left<=right)
{
mid=(left+right)/;
if(check(mid)) left=mid+;
else right=mid-;
}
printf("%d",left-);
return ;
}
Floyd:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[][],n,map[][],t;
int main()
{
cin>>n;
memset(map,0x3f,sizeof(map));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&map[i][j]);
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&j!=k&&k!=i&&map[i][k]+map[k][j]<map[i][j])
map[i][j]=map[i][k]+map[k][j];
scanf("%d",&t);
while(t--)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",map[x][y]);
} return ;
}
SPFA:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define N 510
using namespace std;
int map[N][N],dis[N],n,m;
bool exist[N];
int SPFA(int x,int y)
{
queue<int> q;
memset(dis,0x3f,sizeof(dis));memset(exist,false,sizeof(exist));
q.push(x);dis[x]=;exist[x]=true;
while(!q.empty())
{
int h=q.front();q.pop();exist[h]=false;
for(int i=;i<=n;i++)
{
if(dis[i]>dis[h]+map[h][i])
{
dis[i]=dis[h]+map[h][i];
if(exist[i]==false)
q.push(i),exist[h]=true;
}
}
}
return dis[y];
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&map[i][j]);
scanf("%d",&m);
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",SPFA(x,y));
}
return ;
}
Dijkstra:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
using namespace std;
int n,map[][],dis[];
bool exist[];
int dij(int x,int y)
{
dis[x]=;
for(int i=;i<=n;i++)
{
int k=,minl=0x5f;
for(int j=;j<=n;j++)
if(exist[j]==false&&dis[j]<minl)
minl=dis[j],k=j;
if(k==) break;
exist[k]=true;
for(int j=;j<=n;j++)
if(dis[j]>dis[k]+map[k][j])
dis[j]=dis[k]+map[k][j];
}
return dis[y];
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&map[i][j]);
int t;
scanf("%d",&t);
while(t--)
{
int x,y;
scanf("%d%d",&x,&y);
memset(dis,0x3f,sizeof(dis));
memset(exist,false,sizeof(exist));
printf("%d\n",dij(x,y));
}
return ;
}
并查集:
#include<iostream>
#include<cstdio>
#include<cstring>
int fa[],n,m,q;
int find(int x)
{
if(fa[x]==x) return fa[x];
else return fa[x]=find(fa[x]);
}
void un(int x,int y)
{
int rx=find(x),ry=find(y);
if(rx!=ry) fa[rx]=ry;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
fa[i]=i;
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
int rx=find(x),ry=find(y);
if(rx==ry) continue;
else un(rx,ry);
}
scanf("%d",&q);
while(q--)
{
int x,y;
scanf("%d%d",&x,&y);
int rx=find(x),ry=find(y);
if(rx==ry) printf("Yes\n");
else printf("No\n");
} return ;
}
Kursual:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
int from,to,value;
bool operator < (const node &a)const
{
return value<a.value;
}
}e[*];
int n,m,fa[*];
int find(int x)
{
if(fa[x]==x) return fa[x];
else return fa[x]=find(fa[x]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int x,y,z,i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
e[i].from=x;e[i].to=y;e[i].value=z;
}
sort(e+,e+m+);
int cnt=,MST=;
for(int i=;i<=n;i++)
fa[i]=i;
while(cnt<=n-)
{
cnt++;
int x=e[cnt].from,y=e[cnt].to;
int rx=find(x),ry=find(y);
if(rx==ry) continue;
else{
fa[rx]=ry;MST+=e[cnt].value;
}
}
printf("%d",MST);
return ;
}
Prim:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,map[][],dis[],mst;
bool exist[];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&map[i][j]);
memset(exist,true,sizeof(exist));
memset(dis,0x3f,sizeof(dis));
dis[]=;
for(int i=;i<=n;i++)
{
int k=;
for(int j=;j<=n;j++)
if(exist[j]==true&&dis[j]<dis[k])
k=j;
exist[k]=false;
for(int j=;j<=n;j++)
{
if(exist[j]&&map[k][j]<dis[j])
dis[j]=map[k][j];
}
}
for(int i=;i<=n;i++)
mst+=dis[i];
printf("%d",mst);
return ;
}
拓扑:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define N 510
using namespace std;
int ru[N],map[N][N],n,m;
queue<int> q;
int main()
{
scanf("%d%d",&n,&m);
memset(ru,,sizeof(ru));
memset(map,,sizeof(map));
for(int x,y,i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
map[x][y]=;
ru[y]++;
}
for(int i=;i<=n;i++)
if(ru[i]==)
q.push(i);
while(!q.empty())
{
int x=q.front();q.pop();
cout<<x<<' ';
for(int i=;i<=n;i++)
{
if(map[x][i]==)
ru[i]--;
if(ru[i]==)
q.push(i);
}
}
return ;
}
分解质因数:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std;
int n,ss[],a[],head;
bool ff[];
bool sss(int k)
{
bool yes=true;
for(int i=;i<k;i++)
if(k%i==)
yes=false;
if(yes==false)
{
ff[k]=;
return ;
}
else{
head++;
a[head]=k;
for(int i=;i*k<;i++)
ff[i*k]=;
return ;
}
}
void printff(int pp)
{
printf("%d=",n);
for(int i=;i<pp;i++)
{
printf("%d*",ss[i]);
}
printf("%d\n",ss[pp]);
} void dfs(int k,int m,int p)
{
for(int i=m;i<=head;i++)
if(k%a[i]==)
{
if(k/a[i]==)
{
ss[p]=a[i];printff(p);
exit();// 在搜索中卡时啥的比较有用,由搜索直接退出
}
else{
ss[p]=a[i];
dfs(k/a[i],i,p+);
}
}
}
int main()
{
for(int i=;i<=;i++)
if(ff[i]==)
sss(i);
scanf("%d",&n);
dfs(n,,);
return ;
}
// 其实这个题暴力枚举就好了
NOIP 前夕 模板整理的更多相关文章
- NOIP前模板整理
图 最短路径 #include <queue> #define N 1000 typedef long long ll; using namespace std; int d[N], w[ ...
- 【数学】NOIP数论内容整理
NOIP数论内容整理 注:特别感谢sdsy的zxy神仙以及lcez的tsr筮安帮助审稿 一.整除: 对于\(a,b~\in~Z\),若\(\exists~k~\in~Z\),\(s.t.~b~=~k~ ...
- Noip往年题目整理
Noip往年题目整理 张炳琪 一.历年题目 按时间倒序排序 年份 T1知识点 T2知识点 T3知识点 得分 总体 2016day1 模拟 Lca,树上差分 期望dp 144 挺难的一套题目,偏思维难度 ...
- 字符串系列——KMP模板整理
KMP模板整理 KMP与扩展KMP: /*vs 2017/ vs code以外编译器,去掉windows.h头文件和system("pause");*/ #include<i ...
- NOIp初赛题目整理
NOIp初赛题目整理 这个 blog 用来整理扶苏准备第一轮 csp 时所做的与 csp 没 有 关 系 的历年 noip-J/S 初赛题目,记录了一些我从不知道的细碎知识点,还有一些憨憨题目,不定期 ...
- ACM算法模板整理
史诗级ACM模板整理 基本语法 字符串函数 istream& getline (char* s, streamsize n ); istream& getline (char* s, ...
- NOIP模板整理计划
先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...
- noip考前模板大整理
//归并排序求逆序对 #include<bits/stdc++.h> #define ll long long using namespace std; ]; ll ans; ]; voi ...
- NOIP数学相关模板整理
$O(n)$递推求逆元 #include<cstdio> #include<cstring> #include<algorithm> using namespace ...
随机推荐
- 使用Kubernetes里的job计算圆周率后2000位
使用Kubernetes里的job(作业),我们可以很方便地执行一些比较耗时的操作. 新建一个job.ymal文件: 定义了一个Kubernetes job,名称为pi,类型为job,容器名称为pi, ...
- WPF知识点全攻略05- XAML内容控件
此处简单列举出布局控件外,其他常用的控件: Window:WPF窗口 UserControl:用户控件 Page:页 Frame:用来浏览Page页 Border:嵌套控件,提供边框和背景. Butt ...
- Linux文件系统概述二
VFS-目录项对象(dentry) 每个文件除了有一个索引节点 inode 数据结构外,还有一个目录项 dentry 数据结构 dentry 结构代表的是逻辑意义上的文件,描述的是文件逻辑上的属性,目 ...
- bootstrap历练实例:标签式的导航菜单
本章将讲解bootstrap提供的用于定义导航元素的一些选项,它使用相同的标签和基类.nav.Bootsrtap也提供了一个用于共享标记和状态的帮助器类.改变修饰的class,可以在不同的样式间进行切 ...
- Bootstrap历练实例:验证状态
验证状态 Bootstrap 包含了错误.警告和成功消息的验证样式.只需要对父元素简单地添加适当的 class(.has-warning. .has-error 或 .has-success)即可使用 ...
- Web服务器☞Apache VS Nginx
Web服务器☞Apache VS Nginx LZ最近公司有一个项目在Web服务器选型上,在Apache和Nginx之间引起了一些讨论.这两者目前都是业内优秀的web服务器,都实现了HTTP1.1协议 ...
- javaEE(4)_response、request对象
一.简介 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应 ...
- ios之UIButoon
第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...
- 条款38:通过复合塑模has-a或“根据某物实现出”
NOTE: 1.复合(composition)的意义和public继承完全不同. 2.在应用域(application domain),复合意味 has-a(有一个). 在实现域(implementa ...
- mysql主从复制延时判断+脚本检查
在生产环境中,主从复制常常会有复制延迟的现象,主要是master是并发的写,而slave是单线程的应用relay log,所以会出现复制延时,在MySQL 5.6版本中有了基于库的多线程复制.还有Ma ...