7.23 div3 B2

编程入门 行业动态 更新时间:2024-10-10 14:21:15

7.23 div3 B2

7.23 div3 B2

B2 - Wonderful Coloring - 2

题目大意:往给定的数组中涂色,保证序列中的每个元素要么用k种颜色中的一种绘制,要么不绘制;以相同颜色绘制的每两个元素都是不同的(即。 E没有两个相等的值画在同一个颜色);k种颜色中每种颜色的元素数量——所有计算的数字必须相等;输出来一种可能情况;

解题思路:
用pair存下这个数组元素和下标,进行排序,用1—k依次进行涂色,用一个计数器q来计算重复元素的个数,每次遇见不同是对它进行初始化;当q>k时,剩下相同的元素化为0,最后的数如果不是k就从最后往前找,找到k之前的数都化为0,保证每种颜色的数量相同。最后按照下标输出即可;

ac代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+1; 
typedef pair<int,int>PII;
PII b[N],d[N];
int a[N],c[N];
int main(){int t;cin>>t;while(t--){int n,k;cin>>n>>k;for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n;i++){b[i]={a[i],i};}sort(b,b+n);	memset(c,0,sizeof c);c[0]=1;int x=1;int q=1;//计数器for(int i=1;i<n;i++){if(b[i].first==b[i-1].first){q++;if(q>k){c[i]=0;continue; }}else {q=1;//初始化}	x++;if(x>k){x=1;} c[i]=x;}//往回找第一个为k的数for(int i=n-1;i>=0;i--){if(c[i]!=0){while(c[i]!=k){c[i]=0;i--;}break;}}for(int i=0;i<n;i++){d[i]={b[i].second,c[i]};}sort(d,d+n);//按照下标排序,输出for(int i=0;i<n;i++){cout<<d[i].second<<" ";}cout<<endl;}return 0;
}

更多推荐

7.23 div3 B2

本文发布于:2024-03-09 23:24:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1726428.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!