제출 #330837

#제출 시각아이디문제언어결과실행 시간메모리
330837AlexPop28Devil's Share (RMI19_devil)C++11
100 / 100
85 ms7148 KiB
#include <bits/stdc++.h>
#define dbg() cerr <<
#define name(x) (#x) << ": " << (x) << ' ' <<

using namespace std;

void SolveTest() {
  int k; cin >> k;
  vector<int> freq(10);
  for (int i = 1; i < 10; ++i) {
    cin >> freq[i]; 
  }
  
  string suff;
  int dig = 9;
  for (int i = 0; i < k - 1; ++i) {
    while (freq[dig] == 0) --dig;
    suff += dig + '0';
    --freq[dig];
  }
  reverse(suff.begin(), suff.end());

  while (freq[dig] == 0) --dig;
  pair<string, int> mx = {string(1, dig + '0'), freq[dig]};

  vector<pair<string, int>> q;
  for (int i = 0; i < dig; ++i) {
    if (freq[i] > 0)
      q.emplace_back(string(1, i + '0'), freq[i]); 
  }

  for (int it = 0; it < (int)q.size(); ++it) {
    auto mn = q[it];

    while (mn.second >= mx.second) {
      mx.first += mn.first;
      mn.second -= mx.second;
    }

    if (mn.second > 0) {
      q.emplace_back(mx.first + mn.first, mn.second);
      mx.second -= mn.second;
    }
  }

  for (int i = 0; i < mx.second; ++i)
    cout << mx.first;
  cout << suff << '\n';
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  int t; cin >> t;
  while (t--) {
    SolveTest();
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...