 /**//*
給出n,k,b[],n<=1000
b[i]表示最后要求的一個(gè)n的排列中a[],a[t] =i的這個(gè)數(shù)左邊滿足a[j]>=i+k的個(gè)數(shù)
求字典序最小的一個(gè)滿足上面條件排列a[]
不會(huì)貪心,看了別人的
用類似拓?fù)渑判蚰菢幼樱看螌ふ易钚〉亩襜[i] = 0的輸出, ------------------ Orz
然后更新b[j], b[j]--
其中 i>=j+k 因?yàn)閕已經(jīng)放在前面了,自然后面的需要a[j]>=i+k的個(gè)數(shù)就少1了
*/
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<set>
#include<list>
#include<numeric>
#include<cassert>
#include<ctime>
#include<bitset>

using namespace std;


int main()
  {
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
 for (int n, k; ~scanf("%d%d", &n, &k); ) {
vector<int> b(n+1);
 for (int i = 1 ; i <= n ; i++) {
scanf("%d", &b[i]);
}
 for (int i = 1, j; i <= n; i ++) {
 for(j = 1; j <= n ; j++) {
 if(b[j] == 0) {
break;
}
}
 if(i > 1) {
putchar(' ');
}
cout<<j;
b[j] = -1;
 for (int p = 1; p + k <= j; p++) {
b[p] --;
}
}
cout<<endl;
}
return 0;
}
|
|
常用鏈接
隨筆分類
Links
搜索
最新評(píng)論

|
|