10 条题解

  • 0
    @ 2024-7-7 9:54:10

    壁垒

    思路

    这是一道构造题。

    首先,计算出数的种类数。如果种类数是奇数,就无法构造,反之可以。

    证明:种类数是奇数时,前 𝑛 n 个数的种类数就一定是奇数。当种类数是偶数时,设数列中数的种类数为 𝑘 k,则构造数列,使得构造的数列前 𝑘 k 项均不相同,剩下的位置把剩余的数输出即可。

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[100005],sum,vis[100005];
    int main(){
    	cin>>n; for(int i=1;i<=n;i++) cin>>a[i],vis[a[i]]++;
    	sort(a+1,a+n+1); sum=1;
    	for(int i=2;i<=n;i++) if(a[i]!=a[i-1]) sum++;
    	if(sum%2==1) {cout<<"-1"; return 0;}
    	cout<<a[1]<<" ";
    	for(int i=2;i<=n;i++) if(a[i]!=a[i-1]) cout<<a[i]<<" ";
    	for(int i=1;i<=n;i++) while(vis[i]>1) vis[i]--,cout<<i<<" ";
    	return 0;
    }
    

    信息

    ID
    2
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    442
    已通过
    192
    上传者