Alex_tz307

Classic - Level 4

Oct 30th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("text.in");
  7. ofstream fout("text.out");
  8.  
  9. struct task {
  10.     int id, power, st, dr;
  11.  
  12.     bool operator < (const task& A) const {
  13.         return this -> power < A.power;
  14.     }
  15. };
  16.  
  17. int32_t main() {
  18.     fin.sync_with_stdio(false);
  19.     fout.sync_with_stdio(false);
  20.     fin.tie(nullptr);
  21.     fout.tie(nullptr);
  22.     int mx_pow, mx_bill;
  23.     fin >> mx_pow >> mx_bill;
  24.     int N;
  25.     fin >> N;
  26.     vector < int > a(N + 1);
  27.     for(int i = 1; i <= N; ++i)
  28.         fin >> a[i];
  29.     int M;
  30.     fin >> M;
  31.     fout << M << '\n';
  32.     vector < task > t(M + 1);
  33.     for(int i = 1; i <= M; ++i)
  34.         fin >> t[i].id >> t[i].power >> t[i].st >> t[i].dr;
  35.     sort(t.begin() + 1, t.end());
  36.     vector < int > sol[M + 1], used(N + 1);
  37.     for(int i = 1; i <= M; ++i) {
  38.         int id = t[i].id, power = t[i].power, st = t[i].st, dr = t[i].dr;
  39.         ++st, ++dr;
  40.         int cat = power / mx_pow;
  41.         int rest = power - cat * mx_pow;
  42.         vector < pair < int , int > > v;
  43.         for(int j = st; j <= dr; ++j)
  44.             v.emplace_back(a[j], j);
  45.         sort(v.begin(), v.end());
  46.         vector < bool > ok(N + 1);
  47.         for(int j = 0; j < (int)v.size() && cat > 0; ++j)
  48.             if(used[v[j].second] == 0) {
  49.                 sol[id].emplace_back(v[j].second - 1);
  50.                 sol[id].emplace_back(mx_pow);
  51.                 used[v[j].second] = mx_pow;
  52.                 --cat;
  53.                 ok[v[j].second] = true;
  54.             }
  55.         if(rest > 0)
  56.             for(int j = 0; j < (int)v.size(); ++j)
  57.                 if(used[v[j].second] + rest <= mx_pow && !ok[v[j].second]) {
  58.                     sol[id].emplace_back(v[j].second - 1);
  59.                     sol[id].emplace_back(rest);
  60.                     used[v[j].second] += rest;
  61.                     break;
  62.                 }
  63.     }
  64.     for(int i = 1; i <= M; ++i) {
  65.         fout << i << ' ';
  66.         for(int x : sol[i])
  67.             fout << x << ' ';
  68.         fout << '\n';
  69.     }
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment