Codeforces Round #531 (Div. 3) B. Array K-Coloring(思维)

 

题目链接:http://codeforces.com/contest/1102/problem/B

       题意是用k个颜色n个数字标记,要求每个颜色至少标记一个数字,每个颜色标记的数字必须不同,能标记的话输出标记序列,不能输出NO。

       思路就是我们对于出现次数大于k的肯定就是不行的,然后我们把每个数的出现次数和它的位置都存起来,然后依次去填数就好了,实现起来可能有点不太好实现。看代码会好理解一点。


AC代码:

#include <bits/stdc++.h>
using namespace std;
int pre[5005][5005];
int main()
{
	int n,k;
	bool flag = true;
	scanf("%d%d",&n,&k);
	map<int,int> m;
	for(int i=1;i<=n;i++){
		int yy;
		scanf("%d",&yy);
		m[yy] ++;
		pre[yy][m[yy]] = i;
		if(m[yy] > k)flag = false;
	}
	int xx = 0;
	bool flag1 = false;
	int p[5005];
	for(int i=1;i<=5000;i++){
		for(int j=1;j<=m[i];j++){
			p[pre[i][j]] = ++xx;
			if(xx == k){
				flag1 = true;
				xx = 0;
			}
		}
	}
	if(flag == false || flag1 == false)puts("NO");
	else{
		puts("YES");
		for(int i=1;i<=n;i++){
			cout<<p[i]<<" ";
		}
	}
	return 0;
}

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:17
听说过付费实习,没想到这么贵啊我去,要不我给你个腰子吧
哈哈哈,你是老六:这种公司一定要注意啊,不要随便签合同,只要签了后面钱可能回不来,而且你通过法律途径也弄不回
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务