Cod sursa(job #2091094)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 19 decembrie 2017 09:47:21
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
using namespace std;

int lg;
int n, k, a[16001];
int numarare(int x)
{
   int nr=0,s=0;
   for(int i=1; i<=n; i++)
   {
       s+=a[i];
       if(s>x)
       {
           s=a[i];
           nr++;
       }
       else if(s==x)
       {
           s=0;nr++;
       }
   }
   if(s!=0)
        nr++;
   if(nr<=k)
        return 1;
   return 0;
}
long long cautbin(long long lg, long long vmin)
{
    long long i, s=0;;
    for(i=268435456;lg!=0;lg>>=1)
        if(i-lg>vmin && numarare(i-lg)==1)
            i-=lg;


    return i;
}
int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d %d", &n, &k);
    long long vmin=-1;
    for(int i=1; i<=n; i++)
    {
            scanf("%d", &a[i]);
            if(a[i]>vmin)
                vmin=a[i];
    }
    long long lg=268435456;
    printf("%lld",cautbin(lg,vmin));
    return 0;
}