Phoenix and Beauty [CF1348 B](构造、水)

B. Phoenix and Beauty

CF1348 B
题意:
给定大小为 n n n的数组 a a a,要求在其中插入大小为 1... n 1...n 1...n数字使所有长度为 k k k的子序列和相同。
无法实现输出-1,否则输出插入后的序列。
思路:
手推一下就发现又是构造循环数组
当已有的数组a中的最小循环节(出现过的数字个数)大于 k k k,输出 − 1 -1 1
否则就输出 m ∗ n m*n mn:原数组 a a a每个元素都占一个循环节,依次输出。

int main(){
    
    
    int t=ird();
    int n,m,a,b;
    while(t--){
    
    
        map<int,int> mp,vis;
        n=ird();m=ird();b=0;
        for(int i=1;i<=n;i++){
    
    
            a=ird();
            mp[a]++;if(mp[a]==1){
    
    vis[++b]=a;}
        }
        if(b>m){
    
    cout<<-1<<endl;continue;}
        if(m>b){
    
    
            while(b!=m){
    
    
                vis[++b]=n;
            }
        }
        cout<<m*n<<endl;
        for(int i=1;i<=n;i++){
    
    
            for(int j=m;j>=1;j--)
                cout<<vis[j]<<" ";
        }
        cout<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44986601/article/details/105930410