Pagini recente » Cod sursa (job #2701998) | Cod sursa (job #175388) | Cod sursa (job #2829230) | Cod sursa (job #1184996) | Cod sursa (job #769169)
Cod sursa(job #769169)
#include<iostream>
#include<fstream>
using namespace std;
int n,k,*v;
int verific (int m)
{
int cont=0,sum=0;
int j=1;
sum=v[j];
//cout<<m<<" m"<<endl ;
while(j<n)
{
//cout<<sum<<" sum "<<endl;
if((sum+v[j+1])<=m)
{
sum=sum+v[j+1];
j++;
}
else
{
cont++;
//cout<<" cont " <<cont<<endl;
j++;
sum=v[j];
}
}
cont++;
//cout<<"cont "<<cont<<endl;
return cont;
}
int cauta(int inf,int sup)
{
int m,a;
while(inf<=sup)
{
m=(sup+inf)/2;
a=verific(m);
if(a>=k)inf=m+1;
else sup=m-1;
//cout<<" m inf sup "<<m<<" "<<inf<<" "<<sup<<endl;
}
m=(sup+inf)/2;
a=verific(m);
while(a==k)
{
m--;
a=verific(m);
}
return m+1;
}
int main()
{
ifstream f("transport.in");
ofstream g("transport.out");
int max=0,sum=0,capacitate=0;
bool ok=false;
f>>n>>k;
v=new int[n+2];
for(int i=1;i<=n;i++)
{
f>>v[i];
//cout<<v[i]<<" ";
if(v[i]>max)max=v[i];
sum=sum+v[i];
}
//cout<<endl<<max<<" "<<"sum"<<" "<<sum<<endl;
capacitate=cauta(max,sum);
g<<capacitate<<endl;
//system("pause");
return 0;
}