Cod sursa(job #1504322)

Utilizator AureliaCretu Aurelia Aurelia Data 17 octombrie 2015 16:56:19
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;
int a[30], i, n, k;
int check(int x)
{int c=0, v=1;
   i=1;
   while(i<=n && v==1)
   {
    int s=0;
    int ok=1;
    while(s<=x && ok==1)
    {if(a[i]>x && s==0) ok=v=0;
     else if(s+a[i]<=x) s=s+a[i], i++;
            else ok=0, c++;}
   }
if(c>k || c==0) return 0;
return 1;
}

int main()
{int max=0, sum=0, cap=0;
ifstream f("transport.in");
ofstream g("transport.out");
f>>n>>k;
for(i=1; i<=n; i++)
{f>>a[i];
if(a[i]>max) max=a[i];
sum=sum+a[i];}
int gasit=0;
int j=max, l=sum;
while(j<=l && gasit==0)
{
    int m=(j+l)/2;
    if(check(m)==1)
       {
           if(check(m-1)==0) gasit=1, cap=m;
           else l=m;

       }
    else
       {
           if(check(m+1)==1) gasit=1, cap=m+1;
           else j=m+1;
       }
}
g<<cap;
f.close();
g.close();
return 0;
}