NOIP 前夕 模板整理
来源:互联网 发布:监控软件手机版 编辑:程序博客网 时间:2024/05/22 19:24
归并排序:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int a[1200],s[1200],n; 6 void megre_sort(int l,int r) 7 { 8 if(l==r) return ; 9 int mid=(l+r)/2;10 megre_sort(l,mid);megre_sort(mid+1,r);11 int i=l,j=mid+1,k=l;12 while(i<=mid&&j<=r)13 {14 if(a[i]<=a[j])15 s[k++]=a[i++];16 else17 s[k++]=a[j++];18 }19 while(i<=mid)20 s[k++]=a[i++];21 while(j<=r)22 s[k++]=a[j++];23 for(int i=1;i<=r;i++)24 a[i]=s[i];25 }26 int main()27 {28 scanf("%d",&n);29 for(int i=1;i<=n;i++)30 scanf("%d",&a[i]);31 megre_sort(1,n);32 for(int i=1;i<=n;i++)33 printf("%d ",a[i]);34 return 0;35 }
高精度:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int a[100],b[100],c[100],len1,len2; 6 char s1[100],s2[100],s3[100]; 7 void add() 8 { 9 for(int i=0;i<len1;i++)10 a[len1-i]=s1[i]-'0';11 for(int i=0;i<len2;i++)12 b[len2-i]=s2[i]-'0';13 int lenc=1,x=0;14 while(lenc<=len1||lenc<=len2)15 {16 c[lenc]=a[lenc]+b[lenc]+x;17 x=c[lenc]/10;18 c[lenc]%=10;19 lenc++;20 }21 c[lenc]=x;22 if(c[lenc]==0)23 lenc--;24 for(int i=lenc;i>=1;i--)25 cout<<c[i];26 cout<<endl;27 }28 void jian()29 {30 memset(c,0,sizeof(c));memset(a,0,sizeof(a));memset(b,0,sizeof(b));31 if(strlen(s1)<strlen(s2)||((strlen(s1)==strlen(s2))&&strcmp(s1,s2)<0))32 {33 strcpy(s3,s1);strcpy(s1,s2);strcpy(s2,s3);34 cout<<'-';35 }36 len1=strlen(s1);len2=strlen(s2);37 for(int i=0;i<len1;i++)38 a[len1-i]=s1[i]-'0';39 for(int i=0;i<len2;i++)40 b[len2-i]=s2[i]-'0';41 int lenc=1;42 while(lenc<=len1||lenc<=len2)43 {44 if(a[lenc]<b[lenc])45 {46 a[lenc]+=10;a[lenc+1]--;47 }48 c[lenc]=a[lenc]-b[lenc];49 lenc++;50 }51 while(c[lenc]==0&&lenc>1)52 lenc--;53 for(int i=lenc;i>=1;i--)54 cout<<c[i];55 cout<<endl;56 }57 void cheng()//高精乘 58 {59 for(int i=0;i<len1;i++)60 a[len1-i]=s1[i]-'0';61 for(int i=0;i<len2;i++)62 b[len2-i]=s2[i]-'0';63 memset(c,0,sizeof(c));64 for(int i=1;i<=len1;i++)65 {66 int x=0;67 for(int j=1;j<=len2;j++)68 {69 c[i+j-1]=a[i]*b[j]+x+c[i+j-1];70 x=c[i+j-1]/10;71 c[i+j-1]%=10;72 }73 c[i+len2]=x;74 }75 int lenc=len1+len2;76 while(c[lenc]==0&&lenc>1) lenc--;77 for(int i=lenc;i>=1;i--)78 printf("%d",c[i]);79 printf("\n"); 80 }81 int main()82 {83 gets(s1);gets(s2);84 len1=strlen(s1);len2=strlen(s2);85 add();86 jian();87 cheng();88 return 0;89 }
二分答案:
跳石头
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int l; 6 int n,m,a[50010]; 7 int check(int x) 8 { 9 int k=0,last=0;10 for(int i=1;i<=n;i++)11 {12 if(a[i]-last<x)13 k++;14 else15 last=a[i];16 }17 if(k>m) return 0;18 else return 1;19 }20 int main()21 {22 scanf("%d%d%d",&l,&n,&m);23 for(int i=1;i<=n;i++)24 scanf("%d",&a[i]);25 n++;a[n]=l;26 int left=1,right=l,mid;27 while(left<=right)28 {29 mid=(left+right)/2;30 if(check(mid)) left=mid+1;31 else right=mid-1;32 }33 printf("%d",left-1);34 return 0;35 }
Floyd:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int f[510][510],n,map[510][510],t; 6 int main() 7 { 8 cin>>n; 9 memset(map,0x3f,sizeof(map));10 for(int i=1;i<=n;i++)11 for(int j=1;j<=n;j++)12 scanf("%d",&map[i][j]);13 for(int k=1;k<=n;k++)14 for(int i=1;i<=n;i++)15 for(int j=1;j<=n;j++)16 if(i!=j&&j!=k&&k!=i&&map[i][k]+map[k][j]<map[i][j])17 map[i][j]=map[i][k]+map[k][j];18 scanf("%d",&t);19 while(t--)20 {21 int x,y;22 scanf("%d%d",&x,&y);23 printf("%d\n",map[x][y]);24 }25 26 return 0;27 }
SPFA:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #define N 510 6 using namespace std; 7 int map[N][N],dis[N],n,m; 8 bool exist[N]; 9 int SPFA(int x,int y)10 {11 queue<int> q;12 memset(dis,0x3f,sizeof(dis));memset(exist,false,sizeof(exist));13 q.push(x);dis[x]=0;exist[x]=true;14 while(!q.empty())15 {16 int h=q.front();q.pop();exist[h]=false;17 for(int i=1;i<=n;i++)18 {19 if(dis[i]>dis[h]+map[h][i])20 {21 dis[i]=dis[h]+map[h][i];22 if(exist[i]==false)23 q.push(i),exist[h]=true;24 }25 }26 }27 return dis[y];28 }29 int main()30 {31 scanf("%d",&n);32 for(int i=1;i<=n;i++)33 for(int j=1;j<=n;j++)34 scanf("%d",&map[i][j]);35 scanf("%d",&m);36 while(m--)37 {38 int x,y;39 scanf("%d%d",&x,&y);40 printf("%d\n",SPFA(x,y));41 }42 return 0;43 }
Dijkstra:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<ctime> 5 using namespace std; 6 int n,map[510][510],dis[510]; 7 bool exist[510]; 8 int dij(int x,int y) 9 {10 dis[x]=0;11 for(int i=1;i<=n;i++)12 {13 int k=0,minl=0x5f;14 for(int j=1;j<=n;j++)15 if(exist[j]==false&&dis[j]<minl)16 minl=dis[j],k=j;17 if(k==0) break;18 exist[k]=true;19 for(int j=1;j<=n;j++)20 if(dis[j]>dis[k]+map[k][j])21 dis[j]=dis[k]+map[k][j];22 }23 return dis[y];24 }25 int main()26 { 27 scanf("%d",&n);28 for(int i=1;i<=n;i++)29 for(int j=1;j<=n;j++)30 scanf("%d",&map[i][j]);31 int t;32 scanf("%d",&t);33 while(t--)34 {35 int x,y;36 scanf("%d%d",&x,&y);37 memset(dis,0x3f,sizeof(dis));38 memset(exist,false,sizeof(exist));39 printf("%d\n",dij(x,y));40 }41 return 0;42 }
并查集:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 int fa[10000],n,m,q; 5 int find(int x) 6 { 7 if(fa[x]==x) return fa[x]; 8 else return fa[x]=find(fa[x]); 9 }10 void un(int x,int y)11 {12 int rx=find(x),ry=find(y);13 if(rx!=ry) fa[rx]=ry;14 }15 int main()16 {17 scanf("%d%d",&n,&m);18 for(int i=1;i<=n;i++)19 fa[i]=i;20 for(int i=1,x,y;i<=m;i++)21 {22 scanf("%d%d",&x,&y);23 int rx=find(x),ry=find(y);24 if(rx==ry) continue;25 else un(rx,ry);26 }27 scanf("%d",&q);28 while(q--)29 {30 int x,y;31 scanf("%d%d",&x,&y);32 int rx=find(x),ry=find(y);33 if(rx==ry) printf("Yes\n");34 else printf("No\n");35 }36 37 return 0;38 }
Kursual:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 struct node{ 7 int from,to,value; 8 bool operator < (const node &a)const 9 {10 return value<a.value;11 }12 }e[1000*2];13 int n,m,fa[1000*2];14 int find(int x)15 {16 if(fa[x]==x) return fa[x];17 else return fa[x]=find(fa[x]);18 }19 int main()20 {21 scanf("%d%d",&n,&m);22 for(int x,y,z,i=1;i<=m;i++)23 {24 scanf("%d%d%d",&x,&y,&z);25 e[i].from=x;e[i].to=y;e[i].value=z;26 }27 sort(e+1,e+m+1);28 int cnt=0,MST=0;29 for(int i=1;i<=n;i++)30 fa[i]=i;31 while(cnt<=n-1)32 {33 cnt++;34 int x=e[cnt].from,y=e[cnt].to;35 int rx=find(x),ry=find(y);36 if(rx==ry) continue;37 else{38 fa[rx]=ry;MST+=e[cnt].value;39 }40 }41 printf("%d",MST);42 return 0;43 }
Prim:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int n,map[510][510],dis[510],mst; 6 bool exist[510]; 7 int main() 8 { 9 scanf("%d",&n);10 for(int i=1;i<=n;i++)11 for(int j=1;j<=n;j++)12 scanf("%d",&map[i][j]);13 memset(exist,true,sizeof(exist));14 memset(dis,0x3f,sizeof(dis));15 dis[1]=0;16 for(int i=1;i<=n;i++)17 {18 int k=0;19 for(int j=1;j<=n;j++)20 if(exist[j]==true&&dis[j]<dis[k])21 k=j;22 exist[k]=false;23 for(int j=1;j<=n;j++)24 {25 if(exist[j]&&map[k][j]<dis[j])26 dis[j]=map[k][j];27 }28 }29 for(int i=1;i<=n;i++)30 mst+=dis[i];31 printf("%d",mst);32 return 0;33 }
拓扑:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #define N 510 6 using namespace std; 7 int ru[N],map[N][N],n,m; 8 queue<int> q; 9 int main()10 {11 scanf("%d%d",&n,&m);12 memset(ru,0,sizeof(ru));13 memset(map,0,sizeof(map));14 for(int x,y,i=1;i<=n;i++)15 {16 scanf("%d%d",&x,&y);17 map[x][y]=1;18 ru[y]++;19 }20 for(int i=1;i<=n;i++)21 if(ru[i]==0)22 q.push(i); 23 while(!q.empty())24 {25 int x=q.front();q.pop();26 cout<<x<<' ';27 for(int i=1;i<=n;i++)28 {29 if(map[x][i]==1)30 ru[i]--;31 if(ru[i]==0)32 q.push(i);33 }34 }35 return 0;36 }
分解质因数:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<ctime>using namespace std;int n,ss[520],a[520],head;bool ff[65000];bool sss(int k){ bool yes=true; for(int i=2;i<k;i++) if(k%i==0) yes=false; if(yes==false) { ff[k]=1; return 0; } else{ head++; a[head]=k; for(int i=1;i*k<64000;i++) ff[i*k]=1; return 1; }}void printff(int pp) { printf("%d=",n); for(int i=1;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]==0) { if(k/a[i]==1) { ss[p]=a[i];printff(p); exit(0);// 在搜索中卡时啥的比较有用,由搜索直接退出 } else{ ss[p]=a[i]; dfs(k/a[i],i,p+1); } }}int main(){ for(int i=2;i<=300;i++) if(ff[i]==0) sss(i); scanf("%d",&n); dfs(n,1,1); return 0;}
// 其实这个题暴力枚举就好了
0 0
- NOIP 前夕 模板整理
- NOIP前夕模板整理第一弹:图论
- NOIP前夕模板整理第二弹:数据结构
- NOIP 考前模板整理
- noip模板整理
- NOIP模板整理
- NOIP 模板整理
- NOIP知识汇总及模板整理
- qwq不断更新的总结【NOIP前夕】
- 16年NOIP复赛前各种模板的整理
- NOIP 模板整理计划 NOIP2017 RP++(持续更新中~)
- NOIP模板
- NOIP 模板整理(多图预警╮(╯▽╰)╭)
- NOIP历年搜索整理
- 2016/6/1 第九届ACM大赛前夕模板总结
- NOIP模板大全
- 【NOIP模板】 tarjan
- 【NOIP模板】KMP
- oracle找不到sid的问题解决
- java设计模式--组合模式
- [Python模块学习]用imghdr模块识别图片格式
- Codevs 1021 玛丽卡==洛谷 P1186
- N级架构演化史
- NOIP 前夕 模板整理
- 16.1116 NOIP 考前模拟(信心题)
- Codevs 1215 迷宫
- Map集合的功能概述
- 16.1117 NOIP 模拟赛
- 最长公共上升子序列
- dom03节点的插入移除克隆
- Codevs 3556 科技庄园==洛谷 P2760
- Windows配置mycat