#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define std std::ios::sync_with_stdio(0)
#define mem(a,b) memset(a,b,sizeof(a));
#define P pair<int,int>
const int INF = 0x3f3f3f3f;
const int maxn = 2e5 + 10;
int a[maxn];
int b[maxn];
int c[maxn];
int main()
{
std;
int T;
cin >> T;
int n, k;
while (T--)
{
mem(b, 0);
mem(c, 0);
int sum = 0;
cin >> n >> k;
priority_queue<P, vector<P>, greater<> >q; //用pair的时候是优先排列第一个元素,如果第一个元素相同,则优先排列第二个元素
for (int i = 0; i < n; i++)
{
cin >> a[i];
q.push({ a[i],i });
if (b[a[i]] < k)
b[a[i]]++, sum++;
}
sum = sum-sum % k; //因为是不同颜色要涂相同的次数所以最大的时候一定是sum为k的整数倍
int i = 0,f=0;
while (!q.empty() && i < sum) //当队列中没有元素或者已经达到了最多涂色块数的时候结束
{
if (b
B2. Wonderful Coloring - 2题解
最新推荐文章于 2022-03-15 21:16:52 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)