Pagini recente » Rating Alexandru Groza (al3xandru) | Cod sursa (job #1363170) | Cod sursa (job #2307183) | Cod sursa (job #2194299) | Cod sursa (job #1305084)
#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;
}