Pagini recente » Cod sursa (job #2966168) | Cod sursa (job #3241419) | Cod sursa (job #2520592) | Cod sursa (job #228011) | Cod sursa (job #164203)
Cod sursa(job #164203)
#include<stdio.h>
#define INPUT "transport.in"
#define OUTPUT "transport.out"
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
int n,k,a[16001],max;
long s;
void citire();
void cautare();
int main()
{
citire();
cautare();
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
fscanf(fin, "%d %d", &n, &k);
max=-1;
s=0;
for(int i=1;i<=n;++i)
{
fscanf(fin, "%d", &a[i]);
if(a[i]>max)
max=a[i];
s+=a[i];
}
}
void cautare()
{
long pozmin,pozmax,pozmij,contor,suma;
pozmin=max;
pozmax=s;
pozmij=(pozmax+pozmin)/2;
while(pozmij!=pozmax&&pozmij!=pozmin)
{
contor=0;
suma=0;
for(int i=1;i<=n;++i)
{
if(suma+a[i]<=pozmij)
{
suma+=a[i];
}
else
{
++contor;
suma=a[i];
}
}
++contor;
if(contor<=k)
{
pozmax=pozmij;
pozmij=(pozmin+pozmax)/2;
}
else
{
pozmin=pozmij;
pozmij=(pozmin+pozmax)/2;
}
}
if(pozmij==pozmin)
{
contor=0;
suma=0;
for(int i=1;i<=n;++i)
{
if(suma+a[i]<=pozmij)
{
suma+=a[i];
}
else
{
++contor;
suma=a[i];
}
}
++contor;
if(contor<=k)
fprintf(fout, "%ld\n", pozmin);
else
fprintf(fout, "%ld\n", pozmax);
}
else
fprintf(fout, "%ld\n", pozmax);
}