Cod sursa(job #1305084)

Utilizator SorinmocanuFMI Sorin Mocanu Sorinmocanu Data 29 decembrie 2014 15:33:40
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include<fstream>
using namespace std;
unsigned int a[16000],n,k,c,l,b[16000];

/*int caut(unsigned int s,unsigned int d)
{
    unsigned int m,x;
    if(s>d)
        return -1;
    else
        {
            m =(s+d)/2;
            if (x==a[m])
                return m;
            if (x<a[m])
                return caut(s,m-1);
            else
                return caut(m+1,d);
        }
}*/

void poz (unsigned int li,unsigned int ls,unsigned int &l,unsigned int a[16000])
{
     int i=li,j=ls,c,i1=0,j1=-1;
     while (i<j)
     {
         if (a[i]>a[j])
         {
             c=a[j]; a[j]=a[i]; a[i]=c;
             c=i1; i1=-j1; j1=-c;
         }
        i=i+i1;
        j=j+j1;
     }
         l=i;
}

void quick (unsigned int li,unsigned int ls)
{
    if(li<ls)
    {
        poz(li,ls,l,b);
        quick(li,l-1);
        quick(l+1,ls);
    }
}

int main()
{
    ifstream f("transport.in");
    ofstream g("transport.out");
    unsigned int i,q=0,r=0,S;
    f>>n>>k;
    for(i=1;i<=n;i++)
        {f>>a[i]; b[i]=a[i];}
    quick(1,n);
    c=b[n]-1;
while(q==0)
{
    i=1; S=0; r=0; c++;
    while(i<=n&&r<=k)
    if(S+a[i]<=c) {i++; S+=a[i];}
    else {r++;S=0;}
    if(r<=k) q++;
}
c++;
g<<c;
    f.close();
    g.close();
    return 0;
    }