Cod sursa(job #1402087)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 26 martie 2015 12:21:46
Problema Paduri de multimi disjuncte Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>
int v[16001];
int cautbin(int n,int s,int z)
{
    int j=0,pas=1<<30,i=0,k=0;
    while(pas!=0)
    {
        if(j+pas<=n && v[j+pas]-v[i]<s)
            j+=pas,pas/=2;
        else
        {
            if(v[j+pas]-v[i]>=s)
            {
                if(v[j+pas]-v[i]>s)
                    j--;
                j+=pas;
                i=j;
                pas=1<30;
                k++;
            }
            else
                pas/=2;
        }
    }
    if(k>z)
        return 0;
    return 1;
}
int main()
{
    int n,k,i,x,s,fl;
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&x);
        v[i]=v[i-1]+x;
    }
    s=v[n]/k;
    if(s*k<n)
        s++;
    fl=0;
    while(fl==0)
    {
        fl=cautbin(n,s,k);
        s++;
    }
    s--;
    printf("%d\n",s);

    return 0;
}