Codeforces Round #289 (Div. 2, ACM ICPC Rules)——B贪心——Painting Pebbles
2015-07-16 20:21
477 查看
There are n piles of pebbles on the table, the i-th pile contains ai pebbles. Your task is to paint each pebble using one of the k given colors so that for each color c and any two piles i and j the difference between the number of pebbles of color c in pile i and number of pebbles of color c in pile j is at most one.
In other words, let's say that bi, c is the number of pebbles of color c in the i-th pile. Then for any 1 ≤ c ≤ k, 1 ≤ i, j ≤ n the following condition must be satisfied |bi, c - bj, c| ≤ 1. It isn't necessary to use all k colors: if color c hasn't been used in pile i, then bi, c is considered to be zero.
Input
The first line of the input contains positive integers n and k (1 ≤ n, k ≤ 100), separated by a space — the number of piles and the number of colors respectively.
The second line contains n positive integers a1, 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). Then n lines should follow, the i-th of them should contain ai space-separated integers. j-th (1 ≤ j ≤ ai) of these integers should be equal to the color of the j-th pebble in the i-th pile. If there are several possible answers, you may output any of them.
Sample Input
Input
Output
Input
Output
Input
Output
In other words, let's say that bi, c is the number of pebbles of color c in the i-th pile. Then for any 1 ≤ c ≤ k, 1 ≤ i, j ≤ n the following condition must be satisfied |bi, c - bj, c| ≤ 1. It isn't necessary to use all k colors: if color c hasn't been used in pile i, then bi, c is considered to be zero.
Input
The first line of the input contains positive integers n and k (1 ≤ n, k ≤ 100), separated by a space — the number of piles and the number of colors respectively.
The second line contains n positive integers a1, 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). Then n lines should follow, the i-th of them should contain ai space-separated integers. j-th (1 ≤ j ≤ ai) of these integers should be equal to the color of the j-th pebble in the i-th pile. If there are several possible answers, you may output any of them.
Sample Input
Input
4 4 1 2 3 4
Output
YES 1 1 4 1 2 4 1 2 3 4
Input
5 2 3 2 4 1 3
Output
NO
Input
5 4 3 2 4 3 5
Output
YES 1 2 3 1 3 1 2 3 4 1 3 4 1 1 2 3 4
/* 把个数从少到多进行排序,用来判断前后是否可能,只要统计循环的次数以及循环到哪里了就可以轻松判断,如果循环次数差的大于1并且差的位数也大于1那么肯定是不行的,for example: m = 2 a[1] = 2, a[2] = 5 1 2 b[1] = 1 c[1] = 0; 1 2 1 2 1 b[1] = 2 c[2] = 1 如果循环次数差的大于2也肯定不行这个显然 所以先判是否可以如果可以直接就根据循环和位输出当前值 */ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct edge{ int a, b, c; }G[110]; bool cmp(edge i, edge j){ return i.a < j.a; } int main() { int n, m; int a[110]; int b[110]; int c[110]; while(~scanf("%d%d", &n, &m)){ for(int i = 1; i <= n ; i++) scanf("%d", &a[i]); for(int i = 1; i <= n; i++){ int k = a[i] / m; int t = a[i] % m ; b[i] = k; c[i] = t; } for(int i = 1; i <= n ;i++){ G[i].a = a[i]; G[i].b = b[i]; G[i].c = c[i]; } sort(G + 1, G + n + 1, cmp); /* for(int i = 1; i <= n ;i++){ printf("%d %d %d", G[i].a, G[i].b, G[i].c); puts(""); } */ int flag = 0; for(int i = 1; i <= n ; i++){ for(int j = i + 1; j <= n ; j++){ if(G[j].b > G[i].b && G[j].c > G[i].c || G[j].b - G[i].b >= 2 ){ flag = 1 ; break; } } if(flag == 1) break; } if(flag == 1) {printf("NO\n"); } else { printf("YES\n"); for(int i = 1; i <= n ; i++){ for(int j = 1; j <= b[i]; j++){ for(int k = 1; k <= m; k++) printf("%d ",k); } for(int j = 1; j <= c[i]; j++) printf("%d ", j); puts(""); } } } return 0; }
相关文章推荐
- Captain_kunkka
- Ubuntu 14.04 SSH bug for “Agent admitted failure to sign using the key”
- 开源蘑菇街TeamTalk报make db_proxy_server failed,信息分析
- Allocation Failure
- ORA-27054 NFS问题解决 AIX 挂载NFS文件
- poj 2904 The Mailboxes Manufacturers Problem( 区间dp)
- Container ViewController初探1
- init engine failure
- Map containsKey用法
- Contains Duplicate III -leetcode
- 关于[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]找不到指定文件的解决办法
- 增加samba用户提示Failed to add entry for user
- AIX系统中使用bsdlog函数输出内核信息
- 阻塞socket上read/write出现errno为EAGAIN的原因解密
- LeetCode#217 Contains Duplicate
- Achieving High Availability and Scalability - ARR and NLB
- 解决Xcode的MainStoryboard对齐不正确的问题
- Error : APP-FND-01926: The custom event WHEN-LOGON-CHANGED raised unhandled exception: ORA-06502: PL
- paint 画笔的一些属性
- aix etherchannel 切换方法和查看方式