Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- #define endl "\n"
- const ll INF = 1e15;
- const int MOD = 1e9 + 7;
- const double EPS = 1e-9;
- const double PI = acos(-1.0);
- mt19937 rng((int) chrono::steady_clock::now().time_since_epoch().count());
- const int N = 1e5 + 5;
- vector<int> G[N];
- ll b, l, d, c[N], n[N], t[N], m[N];
- bool vis[N];
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(NULL), cout.tie(NULL);
- cin >> b >> l >> d;
- for (int i = 0; i < b; ++i)
- cin >> c[i];
- for (int i = 0; i < l; ++i) {
- cin >> n[i] >> t[i] >> m[i];
- G[i].resize(n[i]);
- for (int j = 0; j < n[i]; ++j)
- cin >> G[i][j];
- }
- vector<int> lib;
- for (int i = 0; i < l; ++i)
- lib.push_back(i);
- sort(lib.begin(), lib.end(), [&] (int x, int y) {
- return t[x] < t[y];
- });
- vector<vector<int>> ans;
- int cnt = 0;
- int cur = 0;
- for (int i = 0; i < l; ++i) {
- int idx = lib[i];
- cur += t[idx];
- if (cur > d)
- break;
- ans.push_back(vector<int>());
- sort(G[idx].begin(), G[idx].end(), [&] (int i, int j) {
- return c[i] > c[j];
- });
- int days = d - cur + 1;
- int rem = min(days * m[idx], n[idx]);
- for (int j = 0; j < n[idx] && rem; ++j) {
- if (vis[G[idx][j]])
- continue;
- ans.back().push_back(G[idx][j]);
- vis[G[idx][j]] = true;
- rem--;
- }
- if (ans.back().empty())
- ++cnt;
- }
- cout << (int) ans.size() - cnt << endl;
- for (int i = 0; i < (int) ans.size(); ++i) {
- if (ans[i].empty())
- continue;
- cout << lib[i] << " " << (int) ans[i].size() << endl;
- for (auto x : ans[i])
- cout << x << " ";
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement