B. Phoenix and Beauty----------------------------思维

在这里插入图片描述

在这里插入图片描述
题意:
给定n个数和一个m,现在你可以在任意位置插入任意数量的数,使得连续m个数的和都是一样的。如果不可以得到就输出-1 。可以得到输出长度和数组元素

解析:
如果n个数中不同的元素个数>m 则输出-1
否则我们就复制前m个数n次 (注意的是连续m个数不同元素的个数要等于m,如果不等于m我们还需要添加元素进去)

例如
4 3
2 2 3 4
这个样例正好不同元素个数正好等于m。所以直接复制n次即可。
例如
4 3
1 2 2 1
注意到连续m个数不同元素个数<m,所以我们需要添加元素进去。

长度n*k;

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10000;
int a[N];
int sum[N];
int b[N];
int t;
int n,k; 
set<int> v;
vector<int>res;
map<int,int> mp;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		res.clear();
		v.clear();
	//	mp.clear();
		int mx=0;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i]; v.insert(a[i]);
		 } 
		
		if(v.size()>k)
		{
			cout<<-1<<endl;
			continue;
		}
		for(int i=1;(int)v.size()<k;i++) v.insert(i);
		for(int i=1;i<=n;i++)
		{
			for(auto j:v)
			{
				res.push_back(j);
			}
		}
		cout<<n*k<<endl;
		for(auto j : res) cout<<j<<" ";
		cout<<endl; 
		
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值