Advertisement
BatedCrayon

Profu

Jul 20th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <fstream>
  2. #define NMAX 500001
  3.  
  4. using namespace std;
  5.  
  6. long long int A[NMAX],n,k,C,s,maxim;
  7.  
  8. ifstream in("profu.in");
  9. ofstream out("profu.out");
  10.  
  11. long long int CalcTransport(long long int ip)
  12. {
  13.     long long int trans,i,cap;
  14.     i=1;
  15.     cap=trans=0;
  16.     while(i<=n)
  17.     {
  18.         if(cap+A[i]<=ip)
  19.         {
  20.             cap+=A[i];
  21.             i++;
  22.         }
  23.         else
  24.         {
  25.             trans++;
  26.             cap=0;
  27.         }
  28.     }
  29.     if(cap==0)
  30.         return trans;
  31.     return trans+1;
  32. }
  33.  
  34.  
  35. long long int CautBinar()
  36. {
  37.     long long int p,u,m,rez;
  38.     p=maxim;
  39.     u=s;
  40.     while(p<=u)
  41.     {
  42.         m=p+(u-p)/2;
  43.         if(CalcTransport(m)<=k)
  44.         {
  45.             rez=m;
  46.             u=m-1;
  47.         }
  48.         else
  49.             p=m+1;
  50.     }
  51.     return rez;
  52. }
  53.  
  54. void Citire()
  55. {
  56.     in>>n>>k;
  57.     for(long long int i=1; i<=n; i++)
  58.     {
  59.         in>>A[i];
  60.         if(A[i]>maxim)
  61.             maxim=A[i];
  62.         s+=A[i];
  63.     }
  64. }
  65.  
  66. int main()
  67. {
  68.     Citire();
  69.     out<<CautBinar();
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement