Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <random>
- #include <fstream>
- using namespace std;
- mt19937 randik;
- const int MAX = 1e5;
- int used[MAX];
- long long count_of_libraries, books, scan_days;
- int knigi[MAX];
- vector <int> order;
- struct lib{
- int lib_books;
- vector <long long> books;
- int signup;
- int ship_days;
- int how_take;
- vector <long long> taken_books;
- };
- bool comp(long long &a, long long &b){
- return (knigi[a] >= knigi[b]);
- }
- int scanned_book[MAX];
- int main() {
- freopen("input.txt.txt","r",stdin);
- freopen("output.txt","w",stdout);
- ios::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- cin >> books >> count_of_libraries >> scan_days;
- lib libraries[count_of_libraries];
- for (int i = 0; i < books; i++){
- cin >> knigi[i];
- }
- for (int i = 0; i < count_of_libraries; i++){
- cin >> libraries[i].lib_books >> libraries[i].signup >> libraries[i].ship_days;
- for (int j = 0; j < libraries[i].lib_books; j++) {
- long long kek;
- cin >> kek;
- libraries[i].books.push_back(kek);
- }
- }
- for (int i = 0; i < count_of_libraries; i++){
- sort(libraries[i].books.begin(),libraries[i].books.end(),comp);
- // for (auto e : libraries[i].books)
- // cout << knigi[e] << " ";
- }
- long long time = scan_days;
- int counter = 0;
- while (time > 0 && counter < count_of_libraries){
- long long random_lib = randik() % count_of_libraries;
- while (used[random_lib])
- random_lib= randik() % count_of_libraries;
- used[random_lib] = 1;
- order.push_back(random_lib);
- int items = (time - libraries[random_lib].signup) * libraries[random_lib].ship_days;
- libraries[random_lib].how_take = min(items, (int)libraries[random_lib].books.size());
- for (int i = 0; i < libraries[random_lib].how_take; i++){
- libraries[random_lib].taken_books.push_back(libraries[random_lib].books[i]);
- }
- time -= libraries[random_lib].signup;
- counter++;
- }
- cout << counter << "\n";
- for (int i = 0; i < counter;i++){
- cout << order[i] << " " << libraries[order[i]].taken_books.size() << "\n";
- for (auto &e : libraries[order[i]].taken_books)
- cout << e << " ";
- cout << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement