综合——3.25
来源:互联网 发布:沪江背单词软件 编辑:程序博客网 时间:2024/06/11 06:41
1、三值排序
排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候。在这个任务中可能的值只有三种1,2 和3。我们用交换的方法把他排成升序的。
写一个程序计算出,给定的一个1,2,3 组成的数字序列,排成升序所需的最少交换次数。
样例
输入
9
2 2 1 3 3 3 2 3 1
输出
4
#include<stdio.h>#include<stdlib.h>#include<cstring>#include<algorithm>using namespace std;int a[100001],b[100001];int main() { freopen("sort.in","r",stdin); freopen("sort.out","w",stdout); int i,j,k,n,m; scanf("%d",&n); for(i=1; i<=n; i++){ scanf("%d",&a[i]); b[i]=a[i]; } int ans=0; sort(b+1,b+n+1); for(i=1;i<=n;i++){ if(a[i]!=b[i]){ int p=0; for(j=1;j<=n;j++){ if(a[j]==b[i] && a[j]!=b[j] && !p)p=j; if(a[j]==b[i] && b[j]==a[i]){ a[i]=b[i];a[j]=b[j]; ans++;break; } } if(a[i]!=b[i]){ int tmp=a[i];a[i]=a[p];a[p]=tmp;ans++; } } } printf("%d\n",ans); return 0;}
2、转圈游戏
就是一个快速幂!
#include<stdio.h>#include<stdlib.h>#include<cstring>#define ll long longlong long f(ll b,ll p,ll k){ if(p==0)return 1; ll tmp=f(b,p/2,k)%k; tmp=(tmp*tmp)%k; if(p%2)tmp=(tmp*b)%k; return tmp;}int main(){ freopen("circle.in","r",stdin); freopen("circle.out","w",stdout); long long i,j,k,n,m,x; scanf("%lld%lld%lld%lld",&n,&m,&k,&x); //printf("%d\n",(m*10^k+x)%n); long long b=10%n,p=k,mod=n,ans=1;m%=n; ans=f(b,p,mod); ans*=m;ans%=n;ans+=x;ans%=n; printf("%lld\n",ans); return 0;}
3、瑞士轮
就是一个归并排序!
#include<stdio.h>#include<cstdlib>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int R,Q;struct node{ int s,w; int number;};node a[200001],b[200010],b1[200010],r[200010];int cmp(const node &c,const node &b){ return c.s>b.s || c.s==b.s && c.number<b.number;}void guib(int lena,int lenb){ int i=1,j=1,k=1; while(i<lena && j<lenb && k<=lena+lenb){ if(b[i].s>b1[j].s || b[i].s==b1[j].s && b[i].number<b1[j].number){ r[k++]=b[i++]; } else{ r[k++]=b1[j++]; } } for(int u=i;u<=lena;u++) r[k++]=b[u]; for(int u=j;u<=lenb;u++) r[k++]=b1[u]; for(int u=1;u<=lena+lenb;u++) a[u]=r[u];}int main() { freopen("swiss.in","r",stdin); freopen("swiss.out","w",stdout); int i,j,k,n,m,bb=0,bb1=0; cin>>n>>R>>Q; n<<=1; for(i=1;i<=n;i++) a[i].number=i; for(i=1; i<=n; i++) scanf("%d",&a[i].s); for(i=1; i<=n; i++) scanf("%d",&a[i].w); sort(a+1,a+n+1,cmp); for(i=1;i<=R;i++){ bb=0,bb1=0; for(j=1;j<=n;j+=2){ if(a[j].w>a[j+1].w){ a[j].s++;b[++bb]=a[j];b1[++bb1]=a[j+1]; } else{ a[j+1].s++;b[++bb]=a[j+1];b1[++bb1]=a[j]; } } guib(bb,bb1); } printf("%d\n",a[Q].number); return 0;}
4、母亲的牛奶
BFS也不会爆空间啊!
#include<stdio.h>#include<cstdlib>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int a[10000001],b[10000001],c[10000001];int aa,bb,cc;int flag[21][21][21],ans[10000001],t;int bfs(){ int head=0,tail=1; do{ head++; if(a[head]){ if(a[head]>=bb-b[head]){ a[++tail]=a[head]-bb+b[head]; b[tail]=bb;c[tail]=c[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } else{ ++tail; b[tail]=b[head]+a[head]; a[tail]=0;c[tail]=c[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } if(a[head]>=cc-c[head]){ a[++tail]=a[head]-cc+c[head]; c[tail]=cc;b[tail]=b[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } else{ ++tail; c[tail]=c[head]+a[head]; a[tail]=0;b[tail]=b[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } } if(b[head]){ if(b[head]>=aa-a[head]){ b[++tail]=b[head]-aa+a[head]; a[tail]=aa;c[tail]=c[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } else{ ++tail; a[tail]=b[head]+a[head]; b[tail]=0;c[tail]=c[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } if(b[head]>=cc-c[head]){ b[++tail]=b[head]-cc+c[head]; c[tail]=cc;a[tail]=a[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } else{ ++tail; c[tail]=b[head]+c[head]; b[tail]=0;a[tail]=a[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } } if(c[head]){ if(c[head]>=bb-b[head]){ c[++tail]=c[head]-bb+b[head]; b[tail]=bb;a[tail]=a[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } else{ ++tail; b[tail]=b[head]+c[head]; c[tail]=0;a[tail]=a[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } if(c[head]>=aa-a[head]){ c[++tail]=c[head]-aa+a[head]; a[tail]=aa;b[tail]=b[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } else{ ++tail; a[tail]=c[head]+a[head]; c[tail]=0;b[tail]=b[head]; if(flag[a[tail]][b[tail]][c[tail]])tail--; else{ flag[a[tail]][b[tail]][c[tail]]=1; if(a[tail]==0){ ans[++t]=c[tail]; } } } } }while(head<tail);}int main(){ freopen("milk.in","r",stdin); freopen("milk.out","w",stdout); int i,j,k,n,m; cin>>aa>>bb>>cc;c[1]=cc; flag[0][0][c[1]]=1; ans[++t]=c[1]; bfs(); sort(ans+1,ans+t+1); for(i=1;i<=t;i++) if(ans[i]==0 && i==1)printf("%d ",ans[i]); else if(ans[i]!=ans[i-1])printf("%d ",ans[i]); puts(""); return 0;}
0 0
- 综合——3.25
- python——综合
- 风暴——综合
- Ubuntu快捷键——综合
- 综合练习——双色球
- ISDN——综合业务数字网
- 汇编语言综合研究——使用寄存器
- C#综合揭秘——细说事务
- C#综合揭秘——细说事务
- C#综合揭秘——细说事务
- C#综合揭秘——细说事务
- C#综合揭秘——细说事务
- C#综合揭秘——细说事务
- 黑马程序员——HashMap综合练习
- Java——集合IO综合应用
- C#综合揭秘——细说多线程
- C#综合揭秘——细说事务
- 【bzoj2242】计算器——数论综合
- leetcodeOJ 240. Search a 2D Matrix II
- Atom如何实时渲染界面(markdown,html)
- 网易笔试有感
- 总算开始了
- 以下哪种数据结构的查找效率最高
- 综合——3.25
- Standford 机器学习—第四讲 神经网络的表示
- 蓝桥杯搭积木全排列
- 初学linux ---浅谈进程
- 安卓开发中HttpURLConnection 连接能否指定只走移动数据?
- 【unity&文章】攻击敌人判定
- Delphi版本号对照(条件编译中用到)
- iOS Expected unqualified-id 和 Unkown type name 'NSString'
- 获取属性列表