egogoboy

высшая проба отбор №2

Nov 15th, 2022 (edited)
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.77 KB | None | 0 0
  1. /*Сдать решение задачи B-Бродячие музыканты
  2. Полный балл:  100
  3. Бонусные баллы:   
  4. Имя входного файла: in.txt или стандартный поток ввода
  5. Имя выходного файла:   out.txt или стандартный поток вывода
  6. Ограничение времени:  1 с
  7. Ограничение памяти:    256M
  8. Бродячие музыканты
  9. Труппа бродячих музыкантов отправилась в путешествие из города 0 в город n+1. По дороге на равном расстоянии расположены n городов с номерами 1, 2, 3, ..., n, переход от одного городу к следующему занимает один день. В каждом городе музыканты могут выступить и получить прибыль (или убыток), равный ai марок для города i. Выступая в городе музыканты бесплатно пополняют запасы еды, однако не могут нести запас более чем на k дней пути.
  10.  
  11. В начале путешествия у музыкантов есть запас еды на k дней (то есть они могут дойти до городов с номерами от 1 до k не выступая в промежуточных городах) и p марок.
  12.  
  13. Определите максимальное количество марок, с которыми музыканты могут прийти в город n+1. Если в процессе выступлений у музыкантов не хватит денег чтобы оплатить убытки, то их путешествие закончится - в этом случае нужно вывести число -1.
  14.  
  15. Формат входных данных
  16. В первой строке задано три целых неотрицательных числа n, k, p (1 ≤ k ≤ n ≤ 2 × 105, 0 ≤ p ≤ 109).
  17.  
  18. Во второй строке задано n целых чисел ai (-109 ≤ ai ≤ 109).
  19.  
  20. Формат результата
  21. В единственной строке выведите ответ на задачу.
  22.  
  23. Примеры
  24. Входные данные
  25. 3 1 0
  26. -2 10 100
  27. Результат работы
  28. -1
  29. Входные данные
  30. 3 1 2
  31. -2 10 100
  32. Результат работы
  33. 110
  34. Входные данные
  35. 3 2 0
  36. 10 -3 7
  37. Результат работы
  38. 17
  39. Примечания
  40. В первом примере музыканты имеют запас еды только на один день и 0 марок. Они обязаны выступить в первом городе и их денег не хватит для покрытия убытков.
  41.  
  42. Во втором примере музыканты также имеют запас еды только на один день и должны выступать в каждом городе, однако количество марок никогда не становится отрицательным.
  43.  
  44. В третьем примере музыканты выступают в городах 1 и 3.
  45.  
  46. Система оценки:
  47.  
  48. Решения, верно работающие при n ≤ 20 будут получать не менее 30 баллов.
  49.  
  50. Решения, верно работающие при n ≤ 1000 будут получать не менее 60 баллов.*/
  51.  
  52.  
  53.  
  54. #include<iostream>
  55. #include<fstream>
  56. #include<vector>
  57. #include<stdint.h>
  58. #include<algorithm>
  59. #include<cmath>
  60. #define all(container) container.begin(), container.end()
  61. #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter)
  62. #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter)
  63. #define vec(type) std::vector<type>
  64. #define dvec(type) std::vector<std::vector<type>>
  65. //#define fin std::cin
  66.  
  67. struct town {
  68.     int64_t p;
  69.     int64_t k;
  70. };
  71.  
  72. int64_t ans = -1, statk, n;
  73. vec(int) a;
  74. vec(town) point;
  75.  
  76. void travel(int t, int k, int64_t p) {
  77.     if (point[t].p < p) {
  78.         point[t].p = p;
  79.         point[t].k = k;
  80.     }
  81.     if (p < 0 || point[t].k > k) {
  82.         return;
  83.     }
  84.     else if (t == n) {
  85.         ans = std::max(ans, p);
  86.         return;
  87.     }
  88.     else {
  89.         if (k > 0)
  90.             travel(t + 1, k - 1, p);
  91.         travel(t + 1, statk, p + a[t]);
  92.     }
  93. }
  94.  
  95. int main() {
  96.     std::ifstream fin("in.txt");
  97.     int64_t p, i = 0;
  98.     fin >> n >> statk >> p;
  99.     a.resize(n); point.resize(n + 1);
  100.     fors(i, 0, n)
  101.         fin >> a[i];
  102.     travel(0, statk - 1, p);
  103.     std::cout << ans;
  104.     return 0;
  105. }
Tags: olimp
Advertisement
Add Comment
Please, Sign In to add comment