题目大意:
给出n个数ai,每次向一个序列中加入一个数(序列最初为空),并计算出最小未出现的正整数,需要使每次操作的总和最大,问该插入序列的顺序
输入格式
第一行包含单个整数t(1≤t≤100)-测试用例的数量。每个测试用例的第一行包含单个整数n(1≤n≤100)。
每个测试用例的第二行包含n个整数a1、a2、…。,An(0≤ai≤100)。
输出格式
对于每个测试用例,打印数组b1、b2、…。,bn-a1,a2,…的最优重新排序。,因此MEX在其前缀上的和是最大化的。如果存在多个最优解,你可以找到任何一个。
Example
input
3
7
4 2 0 1 3 3 7
5
2 2 8 6 9
1
0
output
0 1 2 3 4 7 3
2 6 8 9 2
0
从小到大插入序列,先每种数只插入一个,因为如果在已经有3的情况下再插入3,并没有插入4好,最后再把剩下的数插入即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=103;
int a[maxn];
bool flag[maxn];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
flag[a[i]]=0;
}
sort(a+1,a+n+1);
for(int i=1;i<=n;++i){
if(!flag[a[i]]){
printf("%d ",a[i]);
flag[a[i]]=1;
a[i]=-1;
}
}
for(int i=1;i<=n;++i)
if(a[i]!=-1)printf("%d ",a[i]);
printf("\n");
}
return 0;
}