Pagini recente » Cod sursa (job #3126917) | Cod sursa (job #593902) | Cod sursa (job #656531) | Cod sursa (job #1297565) | Cod sursa (job #2059681)
#include <fstream>
#include <stdlib.h>
using namespace std;
int maxim;
int belefer(int* a,int k,int n,int c){
int sum=0,j=1;
for(int i=0;i<n;i++){
if(sum+a[i]>c){
sum=a[i];
j++;
}
else sum+=a[i];
}
return j;
}
long long binaris(long long e,long long v,int* a, int k, int n){
if(e>v){
return 0;
}
else{
int mid=(e+v)/2;
int l=belefer(a,k,n,mid);
if(l==k){
while(belefer(a,k,n,mid)==k){
mid-=1;
}
return mid+1;
}
else{
if(l>k) return binaris(mid,v,a,k,n);
else return binaris(e,mid,a,k,n);
}
}
}
int main()
{
ifstream f("transport.in");
ofstream g("transport.out");
int*a;
int n,k;
long long b=256000000;
f>>n>>k;
a=(int*)calloc(n,sizeof(int));
maxim=-1;
for(int i=0;i<n;i++){
f>>a[i];
if(a[i]>maxim){
maxim=a[i];
}
}
g<<binaris(maxim,b,a,k,n);
free(a);
f.close();
g.close();
return 0;
}