首页 > 其他 > 详细

Codeforces Round #436 (Div. 2), problem: (D) Make a Permutation!

时间:2017-10-02 20:46:08      阅读:260      评论:0      收藏:0      [点我收藏+]
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int main(){
	int a[210000],flag[210000],lag[210000],n;
	vector<int> vec;
	memset(flag,0,sizeof(flag));
	memset(lag,0,sizeof(lag));
	vec.clear();
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		flag[a[i]]++;
	}
	for(int i=1;i<=n;i++){
		if(!flag[i])	vec.push_back(i);
	}
	if(vec.empty()){
		printf("0\n");
		for(int i=0;i<n;i++)	i==0?printf("%d",a[i]):printf(" %d",a[i]);
		printf("\n");
	}
	else{
		int tot=0;
		for(int i=0;i<n;i++){
			//printf("%d\n",flag[a[i]]);
			if(flag[a[i]]>1&&a[i]>vec[tot]){
				flag[a[i]]--;
				a[i]=vec[tot];
				tot++;
			}
			else if(flag[a[i]]>1&&a[i]<vec[tot]){
				if(!lag[a[i]]){
					lag[a[i]]=1;
					continue;
				}
				else if(lag[a[i]]){
					flag[a[i]]--;
					a[i]=vec[tot];
					tot++;
				}
			}
			//printf("%d\n",flag[a[i]]);
		}
		printf("%d\n",vec.size());
		for(int i=0;i<n;i++)	i==0?printf("%d",a[i]):printf(" %d",a[i]);
		printf("\n");
	}
	return 0;
}

Codeforces Round #436 (Div. 2), problem: (D) Make a Permutation!

原文:http://www.cnblogs.com/LMissher/p/7622191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!