
Untitled
By: a guest on Jan 28th, 2012 | syntax:
None | size: 1.68 KB | hits: 11 | expires: Never
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
class A {
public:
int idx;
int v;
};
static bool compareA(const A &a, const A &b) { return a.v < b.v; }
static bool compareV(const A &a, const A &b) { return a.idx < b.idx; }
int main()
{
int cases;
scanf("%d", &cases);
while(cases--) {
int m, n;
scanf("%d", &n);
scanf("%d", &m);
vector<A> dolls(n);
vector<int> sel(n);
for(int i=0;i<n;i++) {
scanf("%d",&dolls[i].v);
dolls[i].idx = i;
}
int choosed = 0;
std::sort( dolls.begin(), dolls.end(), &compareA);
for(int pos = 0; pos < dolls.size();pos++) {
int now = ((m-choosed)/n > dolls[0].v) ? dolls[0].v : (m-choosed)/n;
if (now*(n-pos) <= m-choosed) {
choosed += now*(n-pos);
for(vector<A>::iterator it = dolls.begin(); it != dolls.end(); it++) {
(*it).v -= now;
sel[(*it).idx] += now;
}
} else {
break;
}
}
sort( dolls.begin(), dolls.end(), &compareV);
while (choosed < m) {
for(vector<A>::iterator it = dolls.begin(); it != dolls.end(); it++) {
if((*it).v>0) { choosed++; (*it).v--; sel[(*it).idx] ++; }
if(choosed >= m) {
break;
}
}
}
for( vector<int>::iterator it = sel.begin(); it != sel.end(); it++) { cout << *it << " "; }
cout << endl;
}
}