Cod sursa(job #2279669)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 9 noiembrie 2018 21:04:59
Problema Transport Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int a[16004], n, i, c, st, mij, dr, ans;
int transport(int n, int a[], int x)
{
    int cnt=0;
    int sum=0;
    for(int i=1; i<=n-1; i++)
    {
        if(a[i]>x)
        {
            return 0;
        }
        if(sum+a[i]==x)
        {
            cnt++;
            sum=0;
            continue;
        }
        if(sum+a[i]<x)
        {
            sum=sum+a[i];
        }
        if(sum+a[i+1]>x)
        {
            cnt++;
            sum=0;
            continue;
        }
    }
    if(sum+a[n]<=x)
    {
        cnt++;
    }
    return (cnt<=c);
}
int main()
{
    fin>>n>>c;
    dr=0;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
        dr+=a[i];
    }
    st=1;
    ans=0;
    while(st<=dr)
    {
        mij=st+(dr-st)/2;
        if(transport(n,a,mij)==1)
           {
               ans=mij;
               dr=mij-1;
           }
            else
            {
                st=mij+1;
            }
    }
    fout<<ans;
    fin.close();
    fout.close();
    return 0;
}