蒟蒻求调
查看原帖
蒟蒻求调
461359
huangrenheluogu楼主2023/12/4 17:21

返回:

Unknown Error.FAIL card does not exist
#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 5;
int n, x, sum[N], val, a[N], fir;
bool ins[N];
bitset<N>num;
stack<int>s;
inline void clear(){
	while(!s.empty()){
		ins[s.top()] = 0;
		sum[s.top()]++;
		s.pop();
	}
}
inline void add(int x){
	s.push(x);
	ins[x] = 1;
}
inline int RAND(){
	return rand() * rand() % n + 1;
}
int main(){
//	freopen("P9137_1.in", "r", stdin);
//	freopen("code.out", "w", stdout);
	srand(time(NULL));
	scanf("%d", &n);
	if(n == 1){
		printf("-1");
		return 0;
	}
	for(int i = 1; i <= n; i++){
		num[i] = 1;
	}
	for(int i = 1; i <= n; i++){
		scanf("%d", &a[i]);
		num[a[i]] = 0;
		sum[a[i]]++;
	}
	if(num == 0){
		printf("%d\n%d ", n + 2, a[n]);
		for(int i = 1; i < n; i++){
			printf("%d ", a[i]);
		}
		printf("%d %d\n", a[1], a[1]);
		return 0;
	}
	printf("%d\n", n);
	for(int i = 1; i <= n; i++){
		if(sum[i] == 0) fir = i;
		sum[i] = 2 - sum[i];
	}
	printf("%d ", fir);
	add(fir), add(a[1]);
	sum[fir]--;
	for(int i = 2; i <= n; i++){
		if(ins[a[i]]){
			printf("%d ", fir);
			sum[fir]--;
			clear();
			fir = a[i];
			add(a[i]);
		}
		else{
			x = RAND();
			while(x == fir || !sum[x]) x = RAND();
			add(x);
			sum[x]--;
			printf("%d ", x);
			add(a[i]);
		}
	}
	return 0;
}
2023/12/4 17:21
加载中...