zoukankan      html  css  js  c++  java
  • B. Phoenix and Beauty(贪心构造)

    (给定序列长n的数组和k。完美数组的定义是数组中每一个连续k项的子段和为定值)
    (现在要求插入一些数使得数组满足条件,输出你构造的新数列.)

    (color{Red}{---------------------分割线!!hehehe----------------------})

    (这题其实很友好了,在原题中一直提醒你不必构造最短的数列!!!这意味着有方法可以很简单的构造出来。)

    (当数组中数的种类大于k是一定不能构造的,那我们现在考虑小于k的情况。(下面的数组a是假定构造完的数列))

    (定值为a[1]到a[k]的子段和,说明a[2]到a[k+1]也等于这个定值,所以a[k+1]==a[1])

    (那么现在很简单,我们只需要a[1]到a[k]就可以一直往后构造(一个循环节))

    (a[1]到a[k]用原数组中互不相同的数字填充,不够的话你随便添加什么都可以啦~然后就一直构造n次......)

    #include <bits/stdc++.h>
    using namespace std;
    int n,k,t;
    int a[10009],vis[109],tt[10009];
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		memset(vis,0,sizeof(vis));
    		cin>>n>>k;
    		int num=0;
    		for(int i=1;i<=n;i++)
    		{
    			cin>>a[i];
    			if(vis[a[i]]==0)
    				vis[a[i]]=1,tt[++num]=a[i];
    		}
    		if(num>k)	cout<<-1;
    		else
    		{
    			for(int i=num+1;i<=k;i++)	tt[i]=tt[i-1];
    			for(int i=k+1;i<=9999;i++)	tt[i]=tt[i-k];//构造n次就够了,这里我直接暴力9999 
    			cout<<9999<<endl;
    			for(int i=1;i<=9999;i++)	cout<<tt[i]<<" ";
    		}
    		cout<<endl;
    	}
    }
    
  • 相关阅读:
    mvc与springmvc
    mybatis一级与二级缓存详解
    resultType和resultMap的使用场景
    mybatis第一天学习总结
    linux常用命令(不断更新)
    SSH基本框架搭建的详细过程
    hibernate多条件组合查询的两种方式
    AJAX验证用户名是否被注册
    Vimrc
    关于window.open在不同浏览器的不同点
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12818663.html
Copyright © 2011-2022 走看看