Pagini recente » Istoria paginii runda/prega_oji2015_vi_2 | Cod sursa (job #467331) | Cod sursa (job #1878964) | Cod sursa (job #1318066) | Cod sursa (job #766355)
Cod sursa(job #766355)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int valid (int);
int cauta (int,int);
int a[16000],n,k,rez;
int main()
{
int i,sum=0,max=0,s=0,gata,nrt,j;
fin>>n>>k;
for (i=0;i<n;i++)
{
fin>>a[i];
if ( a[i]>max )
max=a[i];
sum=sum+a[i];
}
gata=cauta(max,sum);
//j=gata-1;
//while(valid(j))
//{
// j--;
//}
//if (j==gata-1)
// fout<<gata;
//else
// fout<<j+1;
fout<<rez;
fin.close();
fout.close();
return 0;
}
int cauta (int a, int b )
{
int mid;
mid=a+(b-a)/2;
if (a!=b)
//{
if(!valid(mid))
{
return cauta(mid+1,b);
}
else
{
rez=mid;
//x=cauta (a,mid);
// if (cauta (a,mid))
// return cauta(a,mid);
return cauta(a,mid);
}
// }
// else
// {
// if (valid(mid))
// return mid;
// else return -1;
//}
}
int valid (int i)
{
int nrt,j,s;
nrt=k;
j=0;
s=a[0];
while(nrt&&j<n)
{
j++;
if(s+a[j]>i)
{
nrt--;
s=a[j];
//j++;
}
else
if ( s+a[j]<i)
{
s=s+a[j];
// j++;
}
else
{
s=0;
// j++;
nrt--;
}
}
if (j==n)
return 1;
return 0;
}