Advertisement
tron24

SIT-Prac-J

Feb 9th, 2021
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.44 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #pragma GCC optimize("O3")
  4. #pragma GCC target("avx")
  5. #pragma GCC optimize("Ofast")
  6. #pragma GCC optimize("unroll-loops")
  7. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  8.  
  9. #define ll long long
  10. #define MP make_pair
  11. #define ERR cout << "================================================\n"
  12. #define fi first
  13. #define se second
  14. #define PB push_back
  15. #define all(x) (x).begin(), (x).end()
  16. #define rall(x) (x).rbegin(), (x).rend()
  17. #define forn(i, n) for (ll i = 0; i < (ll)(n); ++i)
  18. #define for1(i, n) for (ll i = 1; i <= (ll)(n); ++i)
  19. #define ford(i, n) for (ll i = (ll)(n)-1; i >= 0; --i)
  20. #define fore(i, a, b) for (ll i = (ll)(a); i <= (ll)(b); ++i)
  21. #define print(v)          \
  22.     for (auto x : v)      \
  23.     {                     \
  24.         cout << x << " "; \
  25.     }
  26. #define umin(...) min({__VA_ARGS__})
  27. #define umax(...) max({__VA_ARGS__})
  28. #define MAX(v) *max_element(all(v))
  29. #define MIN(v) *min_element(all(v))
  30. #define SP << " " <<
  31. #define W(t)  \
  32.     ll t;     \
  33.     cin >> t; \
  34.     while (t--)
  35. #define FIO                           \
  36.     freopen("input.txt", "r", stdin); \
  37.     freopen("output.txt", "w", stdout);
  38. #define FAST                 \
  39.     ios::sync_with_stdio(0); \
  40.     cin.tie(0);              \
  41.     cout.tie(0);
  42.  
  43. using namespace std;
  44.  
  45. typedef pair<int, int> pii;
  46. typedef vector<int> vi;
  47. typedef vector<vi> vvi;
  48. typedef vector<ll> vll;
  49. typedef vector<vll> vvll;
  50.  
  51. const ll INF = 1e18;
  52. const ll NEG_INF = -1 * (1e18);
  53. using namespace std;
  54.  
  55. void usaco(string prob)
  56. {
  57.     freopen((prob + ".in").c_str(), "r", stdin);
  58.     freopen((prob + ".out").c_str(), "w", stdout);
  59. }
  60.  
  61. /* Function to check primality in O(sqrt(n)) */
  62. bool prime(int n)
  63. {
  64.     if (n < 2)
  65.         return false;
  66.     for (int x = 2; x * x <= n; x++)
  67.     {
  68.         if (n % x == 0)
  69.             return false;
  70.     }
  71.     return true;
  72. }
  73.  
  74. /* Function to get prime factorization of n */
  75. vector<int> getFactors(int n)
  76. {
  77.     vector<int> f;
  78.     for (int x = 2; x * x <= n; x++)
  79.     {
  80.         while (n % x == 0)
  81.         {
  82.             f.push_back(x);
  83.             n /= x;
  84.         }
  85.     }
  86.     if (n > 1)
  87.         f.push_back(n);
  88.     return f;
  89. }
  90.  
  91. ll n, k;
  92.  
  93. bool check(ll x, vll a)
  94. {
  95.     // can we split a into k segments each with total time <= x
  96.     ll segs = 0;
  97.  
  98.     forn(i, n)
  99.     {
  100.         if (a[i] > x)
  101.         {
  102.             return false;
  103.         }
  104.     }
  105.  
  106.     ll cur = 0;
  107.  
  108.     for (ll l = 0; l < n; l++)
  109.     {
  110.         if (cur + a[l] > x)
  111.         {
  112.             cur = 0;
  113.             segs++;
  114.         }
  115.         cur += a[l];
  116.     }
  117.  
  118.     segs++;
  119.  
  120.     return (segs <= k);
  121. }
  122.  
  123. void solve()
  124. {
  125.     cin >> n >> k;
  126.     vll a(n);
  127.     forn(i, n)
  128.     {
  129.         cin >> a[i];
  130.     }
  131.  
  132.     ll ans = -1;
  133.     ll l = 0, h = INF;
  134.  
  135.     while (l <= h)
  136.     {
  137.         ll mid = (l + h) / 2;
  138.         if (check(mid, a))
  139.         {
  140.             ans = mid;
  141.             h = mid - 1;
  142.         }
  143.         else
  144.         {
  145.             l = mid + 1;
  146.         }
  147.     }
  148.  
  149.     cout << ans << "\n";
  150. }
  151.  
  152. int main()
  153. {
  154.     //FIO
  155.     FAST
  156.  
  157.         //usaco("cowlands");
  158.  
  159.         ll TC = 1;
  160.     /*
  161.     Uncomment when multiple test cases
  162.     */
  163.  
  164.     cin >> TC;
  165.     for1(tt, TC)
  166.     {
  167.         solve();
  168.     }
  169.     return 0;
  170. }
  171.  
  172. /* stuff you should look for
  173.     * int overflow, array bounds
  174.     * special cases (n=1?)
  175.     * do smth instead of nothing and stay organized
  176.     * WRITE STUFF DOWN
  177. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement