codeforces 864D
来源:互联网 发布:淘宝双十一c店报名条件 编辑:程序博客网 时间:2024/06/07 05:07
http://codeforces.com/problemset/problem/864/D
将一串数列进行换数字操作,问最少需要多少次操作可以将整个数列换成自然数的全排列,并且输出从头比较较小情况下的数列。先找出哪些数字出现过超过1次,表示可以换掉,然后去跑哪些数字没有出现过,去与可以被换掉的数字换,如果被换的较大则直接换掉就可以了,如果被换的较小,则将该数字与被换的数字的第二次出现的位置进行变换。
#include<bits/stdc++.h>using namespace std;int num[222222];int vis[222222];int vs[222222];int ans[222222];int main(){int n;while(cin>>n){ int i,j,k; memset(vis,0,sizeof(vis)); memset(ans,0,sizeof(ans)); for(i=0;i<n;i++) { scanf("%d",&num[i]); vis[num[i]]++;}int tim=0;for(i=1;i<=n;i++){if(vis[i]==0){vs[tim]=i;tim++;}else vis[i]--;}int js=0;vs[tim]=999999; for(i=0;i<n;i++) { if(num[i]>vs[js]||ans[num[i]]) { if(vis[num[i]]>=1) { vis[num[i]]--; num[i]=vs[js]; js++; }} else ans[num[i]]=1;}int q=0;cout<<tim<<endl;for(i=0;i<n;i++){if(q++)cout<<" ";cout<<num[i];}cout<<endl;}return 0;}
阅读全文
0 0
- Codeforces 864D
- codeforces 864D
- codeforces 864D 模拟 + 贪心
- Codeforces 864D Round#436D :全排列乱搞
- Codeforces 864D Make a Permutation!
- CodeForces 864D Make a Permutation!
- Codeforces 864 D Make a Permutation!
- Codeforces Round #436 (Div. 2)D. Make a Permutation! codeforces-864D. Make a Permutation!
- CodeForces 617D CodeForces 617D
- CodeForces 101D
- CodeForces 103D
- CodeForces 222D Olympiad
- codeforces 242d
- CodeForces 111D
- 【codeforces】3D
- CodeForces 127D Password
- codeforces 257D. Sum
- Codeforces 292D
- solr服务快速搭建、配置中文分词、数据导入即solrj增删改查
- jquery().offset()、e.offsetX、e.clientX
- codeforces 864C
- JavaScript --02 语法
- CSS3 三维立体文字及旋转特效
- codeforces 864D
- poj3667 Hotel (线段树+区间合并)
- jsonp 的原理与实现
- ssh用ajax提交表单到后台,后台返回success,不跳转到在struts.xml中设置的页面
- AT绑定句柄无效和拒绝访问
- Linux 硬盘挂载及设置交换分区swap
- 【NOIP2015】运输计划
- bzoj 5056: OI游戏
- hdu 5980 Find Small A