归并排序:

 #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 前夕 模板整理的更多相关文章

  1. NOIP前模板整理

    图 最短路径 #include <queue> #define N 1000 typedef long long ll; using namespace std; int d[N], w[ ...

  2. 【数学】NOIP数论内容整理

    NOIP数论内容整理 注:特别感谢sdsy的zxy神仙以及lcez的tsr筮安帮助审稿 一.整除: 对于\(a,b~\in~Z\),若\(\exists~k~\in~Z\),\(s.t.~b~=~k~ ...

  3. Noip往年题目整理

    Noip往年题目整理 张炳琪 一.历年题目 按时间倒序排序 年份 T1知识点 T2知识点 T3知识点 得分 总体 2016day1 模拟 Lca,树上差分 期望dp 144 挺难的一套题目,偏思维难度 ...

  4. 字符串系列——KMP模板整理

    KMP模板整理 KMP与扩展KMP: /*vs 2017/ vs code以外编译器,去掉windows.h头文件和system("pause");*/ #include<i ...

  5. NOIp初赛题目整理

    NOIp初赛题目整理 这个 blog 用来整理扶苏准备第一轮 csp 时所做的与 csp 没 有 关 系 的历年 noip-J/S 初赛题目,记录了一些我从不知道的细碎知识点,还有一些憨憨题目,不定期 ...

  6. ACM算法模板整理

    史诗级ACM模板整理 基本语法 字符串函数 istream& getline (char* s, streamsize n ); istream& getline (char* s, ...

  7. NOIP模板整理计划

    先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...

  8. noip考前模板大整理

    //归并排序求逆序对 #include<bits/stdc++.h> #define ll long long using namespace std; ]; ll ans; ]; voi ...

  9. NOIP数学相关模板整理

    $O(n)$递推求逆元 #include<cstdio> #include<cstring> #include<algorithm> using namespace ...

随机推荐

  1. C语言二维数组作为函数参数

    设有整型二维数组a[3][4]如下:0   1   2   34   5   6   78   9  10  11 它的定义为:    int a[3][4]={{0,1,2,3},{4,5,6,7} ...

  2. 添加 SSH 公钥

    生成 SSH 密钥 ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" 获取 SSH 公钥信息 cat ~/.ssh/id_rsa.pu ...

  3. java多线程---ReentrantLock源码分析

    ReentrantLock源码分析 基础知识复习 synchronized和lock的区别 synchronized是非公平锁,无法保证线程按照申请锁的顺序获得锁,而Lock锁提供了可选参数,可以配置 ...

  4. 多源最短路径floyd

    #include<iostream> #define INF 105 using namespace std; int main() { ][],mark,x,y,g; while(cin ...

  5. html5文本超过指定行数隐藏显示省略号

    这个很简单,直接贴代码就好了 HTML <span class="name">博客园是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯 ...

  6. selenium--Xpath定位

    前戏 前面介绍过了七种定位方式,今天来介绍最后一种,也是最强大,本人最常用的定位方式xpath Xpath 即为 xml 路径语言,它是一种用来确定 xml 文档中某部分位置的语言.Xpath 基于 ...

  7. ubuntu 升级到5.1kernel,打开bbr

    apt-get -f install wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.1/linux-headers-5.1.0-0 ...

  8. java运行环境jdk的安装和环境变量的配置教程

    jdk的下载与安装 一.官网下载jdk 1.百度搜索jdk,进入官网,如下图所示: 官网下载jdk图1 2.在官网网站中找到合适的版本下载(以最新版本为例),如下图所示: 官网下载jdk图2 官网下载 ...

  9. struts2基于注解的action

    使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...

  10. ios软件设计中注意点

    1.取消系统自带渲染效果 2.取消屏幕旋转 3.项目中搜索丢失文件