Codeforces 509 B Painting Pebbles 贪心

读题目是一个坎。。。真心的。。。看了大半天才看题目的意思。。。

传送门:

题意:

讲的是你有n堆石头 有k种颜色可以涂 第二行是代表每堆石头中石头的数量

题目要求你给所有石头涂色。要求一堆石头和另外一堆石头中相同颜色的石头的数量之差小于等于1

举第一个例子

1

1 4

1 2 4

1 2 3 4

第一堆石头中有颜色1 的一个 其他都为0个

第四堆石头中有颜色1 2 3 4的石头各一个

这样颜色1 的石头的数量差 为0 其他的为1

符合题意。所以是YES

B. Painting Pebbles

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

There arenpiles of pebbles on the table, thei-th pile containsaipebbles. Your task is to paint each pebble using one of thekgiven colors so that for each colorcand any two pilesiandjthe difference between the number of pebbles of colorcin pileiand number of pebbles of colorcin pilejis at most one.

In other words, let’s say thatbi,cis the number of pebbles of colorcin thei-th pile. Then for any1≤c≤k,1≤i,j≤nthe following condition must be satisfied|bi,c-bj,c|≤1. It isn’t necessary to use allkcolors: if colorchasn’t been used in pilei, thenbi,cis considered to be zero.

Input

The first line of the input contains positive integersnandk(1≤n,k≤100), separated by a space — the number of piles and the number of colors respectively.

The second line containsnpositive integersa1,a2,…,an(1≤ai≤100) denoting number of pebbles in each of the piles.

Output

If there is no way to paint the pebbles satisfying the given condition, output "NO" (without quotes) .

Otherwise in the first line output "YES" (without quotes). Thennlines should follow, thei-th of them should containaispace-separated integers.j-th (1≤j≤ai) of these integers should be equal to the color of thej-th pebble in thei-th pile.If there are several possible answers, you may output any of them.

Sample test(s)

input

4 41 2 3 4

output

YES11 41 2 41 2 3 4

input

5 23 2 4 1 3

output

NO

input

5 43 2 4 3 5

output

YES1 2 31 31 2 3 41 3 41 1 2 3 4

解法:贪心。。想要达到目标。。就需要尽可能把颜色平摊。这样才能得到最优解。

判断一堆堆石头中石头数最少的和最多的之间的差 如果差大于你有的颜色的数量 那样肯定没有解。输出NO

其他输出YES 然后按照颜色依次输出就好 比如 1 2 3 4 …. n 1 2 3 4 …n

AC代码

#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#include<map>#include<vector>#include<cstring>#include<stack>#include<cmath>#include<queue>#define INF 0x0f0f0f0fusing namespace std;int main(){int i,j,k,l,m,n,imax=0,imin=105;int a[105];scanf("%d%d",&n,&m);for(i=0;i<n;i++){scanf("%d",&a[i]);if(a[i]>imax)imax=a[i];if(a[i]<imin)imin=a[i];}if(imax-imin>m){printf("NO\n");}else{printf("YES\n");for(i=0;i<n;i++){for(j=0;j<a[i]-1;j++){printf("%d ",j%m+1);}printf("%d ",j%m+1);printf("\n");}}}

,有多远,走多远,把足迹连成生命线。

Codeforces 509 B Painting Pebbles 贪心

相关文章:

你感兴趣的文章:

标签云: