Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. struct library{
  8. vector<int> books_id;
  9. int days, per_day, book_scores;
  10. double score;
  11. bool used = false;
  12. };
  13.  
  14. int B, L, D;
  15. vector<int> books;
  16. vector<library> libraries;
  17.  
  18. void read(){
  19. cin>>B>>L>>D;
  20. /// Books
  21. for(int i=0;i<B;i++){
  22. int x;
  23. cin>>x;
  24. books.push_back(x);
  25. }
  26. /// Libraries
  27. for(int i=0;i<L;i++){
  28. int a, b, c, x;
  29. cin>>a>>b>>c;
  30. library d;
  31. d.per_day = c;
  32. d.days = b;
  33. for(int j=0;j<a;j++) {
  34. cin>>x;
  35. d.books_id.push_back(x);
  36. }
  37. libraries.push_back(d);
  38. }
  39. }
  40.  
  41. int get_best_library(){
  42. int maxi_id = 0, maxi = 0;
  43. for(int i=0;i<L;i++){
  44. library d = libraries[i];
  45. if(!d.used){
  46. d.book_scores = 0;
  47. int books_count = 0;
  48. for(int j=0;j<d.books_id.size();j++){
  49. d.book_scores += books[d.books_id[j]];
  50. if(d.books_id[j]!=0)
  51. books_count++;
  52. }
  53. d.score = (d.book_scores * d.per_day * books_count)/d.days;
  54. if(d.score>maxi){
  55. maxi = d.score;
  56. maxi_id = i;
  57. }
  58. }
  59. }
  60. return maxi_id;
  61. }
  62.  
  63.  
  64. int calc(){
  65. int current_day = 0;
  66. int is_signing = 0;
  67. int target_day = -1;
  68.  
  69. int best_lib = -1;
  70.  
  71. while(current_day < D)
  72. {
  73. if(target_day == curren_day)
  74. {
  75. libraries[best_lib].used = true;
  76. is_signing = 0;
  77. best_lib = -1;
  78. }
  79.  
  80.  
  81. if(is_signing == 0)
  82. {
  83. best_lib = get_best_library();
  84. target_day = current_day + libraries[best_lib].days;
  85. is_signing = 1;
  86. }
  87.  
  88. for(int i = 0; i<L;++i)
  89. {
  90. if(libraries[i].used)
  91. {
  92. int scanned = 0;
  93. int size_lib = size(libraries[i].books_id);
  94. while(scanned < libraries[i].per_day)
  95. {
  96. for(int j = 0; j < libraries[i].size_lib; ++j)
  97. {
  98. if(books[libraries[i].books_id[j]] != 0)
  99. {
  100. books[libraries[i].books_id[j]] = 0;
  101. scanned++;
  102. break;
  103. }
  104.  
  105. }
  106. }
  107. }
  108. }
  109.  
  110. current_day++;
  111. }
  112. }
  113.  
  114. int main() {
  115. freopen("date.in", "r", stdin);
  116.  
  117. read();
  118. cout<<get_best_library();
  119. calc();
  120.  
  121.  
  122. return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement