Dang_Quan_10_Tin

Bài tập THT Bảng B 2021

Jul 17th, 2020 (edited)
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <functional>
  4.  
  5. using namespace std;
  6. using ll = long long;
  7.  
  8. constexpr int N = 1e5 + 5;
  9. constexpr int Inf = 1e9 + 7;
  10. int n, m, c[N];
  11.  
  12. void Read()
  13. {
  14.     cin >> n >> m;
  15.  
  16.     for(int i = 1; i <= n; ++i)
  17.         cin >> c[i];
  18.  
  19.     sort(c + 1, c + n + 1);
  20.     c[0] = -Inf;
  21.  
  22.     if(c[n] == c[1])
  23.     {
  24.         cout << 0;
  25.         exit(0);
  26.     }
  27. }
  28.  
  29. void Subtask_1()
  30. {
  31.     int l = 0, mid, h = c[n];
  32.  
  33.     function<int(int)> g = [&](int v)
  34.     {
  35.         int ans(0), x;
  36.  
  37.         for(int i = 1; i <= n; ++i)
  38.         {
  39.             if(c[i] - c[i - 1] > v)
  40.                 x = 1;
  41.             else
  42.                 ++x;
  43.             ans = max(ans, x);
  44.         }
  45.  
  46.         return ans;
  47.     };
  48.  
  49.     while(l <= h)
  50.     {
  51.         mid = (l + h) / 2;
  52.         if(g(mid) < m)
  53.             l = mid + 1;
  54.         else
  55.             h = mid - 1;
  56.     }
  57.  
  58.     cout << l;
  59. }
  60.  
  61. void Subtask_2()
  62. {
  63.  
  64.     int l = 1, mid, h = c[n];
  65.  
  66.     function<ll(ll)> g = [&](ll v)
  67.     {
  68.         ll ans(1);
  69.  
  70.         for(int i = 2; i <= n; ++i)
  71.             ans += max(0ll, (c[i] - c[i - 1] + v - 1) / v - 1) + 1;
  72.  
  73.         return ans;
  74.     };
  75.  
  76.     while(l <= h)
  77.     {
  78.         mid = (l + h) / 2;
  79.         if(g(mid) > m)
  80.             l = mid + 1;
  81.         else
  82.             h = mid - 1;
  83.     }
  84.  
  85.     cout << l;
  86. }
  87.  
  88. int main ()
  89. {
  90.     ios_base::sync_with_stdio(false);
  91.     cin.tie(NULL);
  92.     cout.tie(NULL);
  93.  
  94.     Read();
  95.     if(m <= n)
  96.         Subtask_1();
  97.     else
  98.         Subtask_2();
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment