共有N个数字,以及M种颜色,相同数字不能被同一种颜色染色。每种颜色染色的数目相同,在每种颜色染色最多的情况下,将每个数字的染色情况输出。
用pair将数字与其下标,标记在一起。在逐个染色。
#include<bits/stdc++.h>
using namespace std;
const int maxn=300000;
typedef pair<int,int> p;
int a[maxn];
int vis[maxn];
int c[maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(vis,0,sizeof(vis));
memset(c,0,sizeof(c));
int n,m,i,j,sum=0;
scanf("%d %d",&n,&m);
priority_queue<p, vector<p>,greater<p> >q;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(vis[a[i]]<m)
{
vis[a[i]]++;
q.push({a[i],i});
sum++;
}
}
sum=sum-sum%m;
int k=0,f=0;
while(!q.empty()&&k<sum)
{
int l=q.top().first;
if(vis[l])
{
vis[l]--;
k++;
c[q.top().second]=f+1;
f++;
f=f%m;
}
q.pop();
}
for(i=1;i<=n;i++)
{
printf("%d ",c[i]);
}
printf("\n");
}
}