zoukankan      html  css  js  c++  java
  • 【CF-1348 B】Phoenix and Beauty 思维

    B. Phoenix and Beauty

    题意

    给出一个长度为n的整数数组(a)(a[i]leq n),以及数字k,现在你可以向数组任意一个位置,

    插入数字1-n,使得数组中长度为k的连续子数组和都相等,如果可以输出最后的数组,否

    则输出-1。

    思路

    只需要把整个数组变成一个循环节长度为k的周期数组。

    假设此时有(num)个不同的数字,如果(num>k),肯定不可以,

    如果(num<=k),在最后随便加上1-n的几个数字凑够k个,输出N次所有不同的数字即可。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    
    int arr[N],brr[N],vis[N];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            memset(vis,0,sizeof(vis));
            int n,k,num=0;
            scanf("%d%d",&n,&k);
            for(int i=1; i<=n; i++)
            {
                scanf("%d",&arr[i]);
                if(!vis[arr[i]])
                    num++;
                vis[arr[i]]=1;
            }
            if(num>k)
            {
                printf("-1
    ");
                continue;
            }
            int tot=0;
            for(int i=1; i<=100; i++)
            {
                if(vis[i])
                    brr[++tot]=i;
            }
            for(int i=tot+1;i<=k;i++) brr[i]=brr[i-1];
            printf("%d
    ",n*k);
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=k;j++) printf("%d ",brr[j]);
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    C语言I博客作业10
    C言I博客作业09
    C言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言博客园作业05
    使用注解方式生成Hibernate映射文件
    技术英语单词中英文对照
    spring监听器
    Servlet
  • 原文地址:https://www.cnblogs.com/valk3/p/12968959.html
Copyright © 2011-2022 走看看