Guest

Untitled

By: a guest on Jan 28th, 2012  |  syntax: None  |  size: 1.68 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. #include <iostream>
  2. #include <iterator>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <stdio.h>
  6.  
  7. using namespace std;
  8.  
  9. class A {
  10.     public:
  11.         int idx;
  12.         int v;
  13. };
  14.  
  15. static bool compareA(const A &a, const A &b) { return a.v < b.v; }
  16. static bool compareV(const A &a, const A &b) { return a.idx < b.idx; }
  17.  
  18. int main()
  19. {
  20.     int cases;
  21.     scanf("%d", &cases);
  22.     while(cases--) {
  23.         int m, n;
  24.         scanf("%d", &n);
  25.         scanf("%d", &m);
  26.  
  27.         vector<A> dolls(n);
  28.         vector<int> sel(n);
  29.         for(int i=0;i<n;i++) {
  30.             scanf("%d",&dolls[i].v);
  31.             dolls[i].idx = i;
  32.         }
  33.  
  34.         int choosed = 0;
  35.         std::sort( dolls.begin(), dolls.end(), &compareA);
  36.         for(int pos = 0; pos < dolls.size();pos++) {
  37.             int now = ((m-choosed)/n > dolls[0].v) ? dolls[0].v : (m-choosed)/n;
  38.  
  39.             if (now*(n-pos) <= m-choosed) {
  40.                 choosed += now*(n-pos);
  41.                 for(vector<A>::iterator it = dolls.begin(); it != dolls.end(); it++) {
  42.                     (*it).v -= now;
  43.                     sel[(*it).idx] += now;
  44.                 }
  45.             } else {
  46.                 break;
  47.             }
  48.         }
  49.  
  50.         sort( dolls.begin(), dolls.end(), &compareV);
  51.         while (choosed < m) {
  52.  
  53.             for(vector<A>::iterator it = dolls.begin(); it != dolls.end(); it++) {
  54.                 if((*it).v>0) { choosed++; (*it).v--; sel[(*it).idx] ++; }
  55.                 if(choosed >= m) {
  56.                     break;
  57.                 }
  58.             }
  59.         }
  60.  
  61.         for( vector<int>::iterator it = sel.begin(); it != sel.end(); it++) { cout << *it << " "; }
  62.         cout << endl;
  63.     }
  64. }