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 ...
随机推荐
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- Windows Dos命令下查看端口号,杀死端口
PS:本文以 Redis 默认端口 6379 为例 1,首先查询该端口的 pid,使用命令 [netstat -ano | findstr 端口号] F:\Program Files\Redi ...
- Vue 打印预览功能
需求有几种情况: 1.直接在HTML写页面,将页面上的东西用A4纸打印出来: 2.后台传回PDF文件,前台浏览器预览并打印: 3.后台做好要打印的,传回图片,如base64编码,前台浏览器 预览并打印 ...
- 使用vue做移动端瀑布流分页
讲到瀑布流分页有一个方法一定是要用到的 pullToRefresh() 这个也没什么好解释的,想了解的可以去百度一下 下面上代码 <div id="main" class=& ...
- 快学UiAutomator创建第一个实例
工具准备 一.准备好java环境(JDK)和安卓环境(SDK.ADT)jdk1.6+ \eclipse\SDK \ADT详情百度,安装java环境 二.打开eclipse 三.创建步骤: 右键新建== ...
- OracleDBConsole启动不了
今天要用OEM,然后去打开OracleDBConsoleXXX, 提示说什么么么2,然后就各种百度...最后发现...有断了网络连接之后就可以把它启动了...简直惨,不知道这是什么原理,还有Oracl ...
- Codeforces Round #275 (Div. 2)-A. Counterexample
http://codeforces.com/contest/483/problem/A A. Counterexample time limit per test 1 second memory li ...
- iOS 静态库,动态库与 Framework
iOS 静态库,动态库与 Framework 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢 ...
- mysql查询数据包太大:max_allowed_packet
查询大小: show variables like '%max_allowed_packet%'; 修改大小: set global max_allowed_packet = 1024 * 1024 ...
- C#图形学习笔记
绘图常用控件.类和结构 颜色 使用System.Drawing.Color结构表示 设置颜色的方法 调用静态函数:Color.FromArgb() public static Color FromAr ...