遍历剩下的鹅卵石,若石头的数量小于m那么显然输出NO,否则把m或m-1个鹅卵石染成1,剩下的染成不同的颜色
#include <bits/stdc++.h>
#define maxn 2005
#define MOD 1000000007
using namespace std;
typedef long long ll;
struct Node{
int x, i;
}node[105];
vector<int> v[105];
bool cmp(const Node&a, const Node&b){
return a.x > b.x;
}
int main(){
// freopen("in.txt", "r", stdin);
int n, k;
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i++){
scanf("%d", &node[i].x);
node[i].i = i;
}
int h = 1;
sort(node, node+n, cmp);
for(int i = 0; i < n; i++){
if(i == 0){
if(node[i].x > k)
h += node[i].x - k;
}
if(node[i].x < h-1){
puts("NO");
return 0;
}
int d = node[i].x > h - 1 ? h : h-1;
for(int j = 1; j <= d; j++)
v[node[i].i].push_back(1);
d = node[i].x - d;
for(int j = 2; j <= d+1; j++)
v[node[i].i].push_back(j);
}
puts("YES");
for(int i = 0; i < n; i++){
for(int j = 0; j < v[i].size(); j++){
if(j == 0)
printf("%d", v[i][j]);
else
printf(" %d", v[i][j]);
}
puts("");
}
return 0;
}