AbubiBoba

1917. Руины титанов: убийственная точность

Jul 14th, 2023
1,712
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <string>
  8. #include <assert.h>
  9. #include <bitset>
  10. #include <map>
  11. #include <set>
  12. #include <queue>
  13. #include <stack>
  14. #include <cstring>
  15.  
  16. #define ret return
  17. #define endl '\n'
  18. #define vec vector
  19. #define all(x) x.begin(), x.end()
  20. #define get_bit(n, i) (1 & (n >> i))
  21. #define sz(x) (long long)(x.size())
  22. #define forik(x) for (int i = 0; i < x; ++i)
  23. #define uint unsigned int
  24.  
  25. typedef long long ll;
  26. typedef unsigned long long ull;
  27. typedef long double ld;
  28.  
  29. using namespace std;
  30.  
  31. const ld eps = 1e-6l;
  32. const int INF = 1e8;
  33.  
  34. void input() {
  35.     if (0)
  36.         setlocale(LC_ALL, "Russian");
  37.     ios_base::sync_with_stdio(0);
  38.     cin.tie(0);
  39.     cout.tie(0);
  40.     cout << fixed;
  41.     cout << setprecision(6);
  42.     //freopen("input.in", "r", stdin);
  43.     //freopen("output.out", "w", stdout);
  44.  
  45. }
  46. void solve();
  47. void precalc();
  48.  
  49. signed main()
  50. {
  51.     input();
  52.  
  53.     int multitest = 1;
  54.     //cin >> multitest;
  55.     precalc();
  56.     while (multitest--)
  57.         solve();
  58.  
  59. }
  60. void precalc() {
  61.  
  62. }
  63. #define int long long
  64. void solve() {
  65.    
  66.     int n, p;
  67.     cin >> n >> p;
  68.     vec<int> a(n);
  69.     for (int i = 0; i < n; ++i) {
  70.         cin >> a[i];
  71.     }
  72.    
  73.     sort(all(a));
  74.     ll max_count = 0;
  75.     int mx_power = 0;
  76.     for (int power = a[0]; power <= a[a.size() - 1]; ++power) {
  77.         ll k = 0;
  78.         for (int i = 0; i < n; ++i)
  79.             if (a[i] == power)
  80.                 ++k;
  81.         if (k * power <= p) {
  82.             mx_power = power;
  83.             max_count += k;
  84.         }
  85.         else
  86.             break;
  87.     }
  88.  
  89.     int hod = 0;
  90.     int prev = 0;
  91.     while (1) {
  92.         if (prev == mx_power)
  93.             break;
  94.         ++hod;
  95.         int l = prev + 1, r = mx_power, ans = prev + 1;
  96.         while (l <= r) {
  97.             int c = (l + r) / 2;
  98.             int cnt = 0;
  99.             for (int i = 0; i < n; ++i)
  100.                 if (a[i] > prev && a[i] <= c)
  101.                     ++cnt;
  102.             ll splash = (ll)cnt * (ll)c;
  103.             if (splash <= p) {
  104.                 l = c + 1;
  105.                 ans = c;
  106.             }
  107.             else
  108.                 r = c - 1;
  109.         }
  110.         prev = ans;
  111.     }
  112.     cout << max_count << ' ' << hod;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment