Advertisement
lalalalalalalaalalla

Untitled

Jan 18th, 2020
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <ostream>
  6. #include <istream>
  7. #include <string>
  8. #include <random>
  9. #include <set>
  10. #include <unordered_set>
  11. #include <map>
  12. #include <unordered_map>
  13. #include <iomanip>
  14. #include <time.h>
  15.  
  16. using namespace std;
  17.  
  18. //#pragma GCC optimize("Ofast")
  19.  
  20. #define int long long
  21. #define pb push_back
  22. #define all(a) (a).begin(), (a).end()
  23. #define ld long double
  24. #define pii pair<int, int>
  25.  
  26. ostream& operator << (ostream& a, const vector<int> &b) {
  27. for (auto k : b) cout << k << " ";
  28. cout << "\n";
  29. return a;
  30. }
  31.  
  32. #define LOCAL
  33.  
  34. #ifdef LOCAL
  35. #define dbg(x) cout << #x << " : " << (x) << "\n";
  36. #else
  37. #define dbg(x)
  38. #endif
  39.  
  40. inline void solve(const vector<int>&a, const int& n, const int& b) {
  41. int val = 0, steps = 0, help, cur;
  42. for (int i = 1; i <= b; i++) {
  43. help = i;
  44. cur = 0;
  45. for (int j = n - 1; j >= 0; j--) {
  46. cur += help / a[j];
  47. help %= a[j];
  48. }
  49. if (cur > steps) {
  50. steps = cur;
  51. val = i;
  52. }
  53. }
  54. cout << val << " " << steps << "\n";
  55. }
  56.  
  57. signed main() {
  58. ios_base::sync_with_stdio(0);
  59. cin.tie(0);
  60. cout.tie(0);
  61. int n;
  62. cin >> n;
  63. vector<int> a(n);
  64. for (int i = 0; i < n; i++) cin >> a[i];
  65. vector<pii> dp(n - 1); // first = max tickets, second - sum of tickets
  66. // TODO: if n == 1 - ans is b[i]
  67. if (n == 1) {
  68. int q;
  69. cin >> q;
  70. int b;
  71. while (q--) {
  72. cin >> b;
  73. cout << b << " " << b << "\n";
  74. }
  75. return 0;
  76. }
  77. dp[0].first = a[1] - 1;
  78. dp[0].second = a[1] - 1;
  79. for (int i = 1; i < n - 1; i++) {
  80. dp[i].first = dp[i - 1].first + (a[i + 1] - 1 - dp[i - 1].second) / a[i];
  81. dp[i].second = dp[i - 1].second + ((a[i + 1] - 1 - dp[i - 1].second) / a[i]) * a[i];
  82. }
  83. // for (int i = 0; i < n - 1; i++) {
  84. // printf("% 4d ", dp[i].first);
  85. // }
  86. // cout << "\n";
  87. // for (int i = 0; i < n - 1; i++) {
  88. // printf("% 4d ", dp[i].second);
  89. // }
  90. // cout << "\n";
  91. int q;
  92. cin >> q;
  93. int b;
  94. int l, r, m;
  95. while (q--) {
  96. cin >> b;
  97. if (b >= dp[n - 2].second) {
  98. // cout << "here1\n";
  99. cout << dp[n-2].second + ((b - dp[n - 2].second)/a[n - 1]) * a[n - 1] << " ";
  100. cout << dp[n - 2].first + (b - dp[n - 2].second) / a[n - 1] << "\n";
  101. } else if (b < a[1]) {
  102. // cout << "here2\n";
  103. cout << b << " " << b << "\n";
  104. } else {
  105. // cout << "here3\n";
  106. l = 0, r = n - 2;
  107. while (r - l > 1) {
  108. m = (l + r) / 2;
  109. if (dp[m].second <= b) l = m;
  110. else r = m;
  111. }
  112. cout << dp[l].second + ((b - dp[l].second)/a[l + 1])*a[l + 1] << " ";
  113. cout << dp[l].first + (b - dp[l].second) / a[l + 1] << "\n";
  114. }
  115. }
  116. }
  117. /*
  118. 4
  119. 1 2 7 11
  120. 1
  121. 11
  122. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement