P10032 #2 WA
  • 板块学术版
  • 楼主Fwio_
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/1/1 11:21
  • 上次更新2024/1/1 15:30:00
查看原帖
P10032 #2 WA
965238
Fwio_楼主2024/1/1 11:21
#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_map>
#include<vector>
using namespace std;
int T;
const int N = 1000010;
int a[N] , b[N] , New[N];
unordered_map<int , int> h;
int n , k;
vector<int> g[11];
vector<int> Ans[100];
bool check(int x , int y){
	for(int i = 0;i < n;i++){
		if(g[x][i] != g[y][i]) return false;
	}
	return true;
}
signed main(){
	cin >> T;
	while(T--){
		h.clear();
		memset(Ans , 0 , sizeof Ans);
		memset(g , 0 , sizeof g);
		scanf("%d%d" , &n , &k); --k;
		for(int i = 1;i <= n;i++) scanf("%d" , &a[i]) , h[a[i]]++;
		int mex = 0;
		while(h[mex]) mex++;
		for(int d = 0;d < 5;d++){
			for(int i = 1;i <= n;i++){
				if(h[a[i]] == 1 && a[i] < mex) New[i] = a[i];
				else New[i] = mex;
			}
			for(int i = 1;i <= n;i++) a[i] = New[i];
			for(int i = 1;i <= n;i++) g[d].push_back(New[i]);
		}
		int pos1 , pos2;
		for(int i = 0;i < 5;i++){
			for(int j = i + 1;j < 5;j++){
				if(check(i , j)){
					pos1 = i , pos2 = j;
					break;
				}
			}
		}
		int cnt = 0;
		int len = pos2 - pos1;
		int fr = pos1;
		for(int i = pos1;i < pos2;i++){
			for(auto j : g[i]) Ans[cnt].push_back(j);
			++cnt;
		}
		if(k < pos1){
			for(auto i : g[k]) printf("%d " , i);
			cout << endl;
		}
		else{
			k -= fr;
			k %= len;
			for(auto i : Ans[k]) printf("%d " , i);
			cout << endl;
		}
	}
	return 0;
}
2024/1/1 11:21
加载中...