Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <iostream>
  2. #include<fstream>
  3. #include <vector>
  4. #include <algorithm>
  5. int numberOfLibraries, books, days;
  6. std::vector<int> bookScores;
  7. std::vector<std::pair<int, int>> pickOrder;
  8. std::vector<std::vector<int>> takenBooks;
  9. struct Library {
  10.     int numberOfBooks;
  11.     int signupTime;
  12.     int scanPerDay;
  13.     int index;
  14.     std::vector<std::pair<int,int>> availableBooks;
  15.  
  16.     Library(int n, int s, int d, int i)
  17.     {
  18.         numberOfBooks = n;
  19.         signupTime = s;
  20.         scanPerDay = d;
  21.         index = i;
  22.     }  
  23.     bool operator<(Library& rhs)
  24.     {
  25.         return signupTime > rhs.signupTime;
  26.     }
  27. };
  28. std::vector<Library> libraries;
  29.  
  30. int main()
  31. {
  32.     std::cin >> books >> numberOfLibraries >> days;
  33.     int numBooks, signup, scans,a;
  34.     for (int i = 0; i < books; i++)
  35.     {
  36.         std::cin >> a;
  37.         bookScores.push_back(a);
  38.     }
  39.     for (int i = 0; i < numberOfLibraries; i++)
  40.     {
  41.         std::cin >> numBooks >> signup >> scans;
  42.        
  43.         Library b(numBooks, signup, scans, i);
  44.         for (int j = 0; j < numBooks; j++)
  45.         {
  46.             std::cin >> a;
  47.             b.availableBooks.push_back({ bookScores[a],a });
  48.         }
  49.         std::sort(b.availableBooks.begin(), b.availableBooks.end());
  50.         std::reverse(b.availableBooks.begin(), b.availableBooks.end());
  51.         libraries.push_back(b);
  52.     }
  53.     std::sort(libraries.begin(), libraries.end());
  54.    
  55.     int index = 0,numPicked = 0;
  56.     while (days > 0 && numPicked < numberOfLibraries)
  57.     {
  58.         Library current = libraries[index];
  59.         days -= current.signupTime;
  60.         int canRead = std::min(days * current.scanPerDay,current.numberOfBooks);
  61.         pickOrder.push_back({ current.index,canRead });
  62.         index++;
  63.         numPicked++;
  64.  
  65.     }
  66.     std::ofstream myfile;
  67.     myfile.open("output.txt");
  68.  
  69.     myfile << numPicked << '\n';
  70.     for (int i = 0; i < index; i++)
  71.     {
  72.         myfile << pickOrder[i].first << ' ' <<  pickOrder[i].second << '\n';
  73.         for (int j = 0; j < pickOrder[i].second; j++)
  74.         {
  75.             myfile << libraries[i].availableBooks[j].second << ' ';
  76.         }
  77.         myfile << '\n';
  78.     }
  79.  
  80.     myfile.close();
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement