Pagini recente » Profil AyanP | Monitorul de evaluare | Borderou de evaluare (job #3364713) | Autentificare | Cod sursa (job #3364713)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
bool transport(int l, int sump[], int nrt,int cap)
{
int nrdrumuri=0,i=0;
for (; i<l && sump[i]<=cap; i++)
{}
i--;
nrdrumuri++;
int j=i+1;
for(; j<l;j++)
{
if(sump[j]-sump[i]>cap)
{
nrdrumuri++;
i=j-1;
}
}
j--;
//cout<<"i: "<<i<<" j: "<<j<<"\n";
if(sump[j]>sump[i]){
nrdrumuri++;
//cout<<"x";
}
//cout<<"nrdrumuri pentru capacitate egala cu "<<cap<<": "<<nrdrumuri<<" \n";
if(nrdrumuri<=nrt)
return true;
else
return false;
}
int main()
{
int n,k;
fin>>n>>k;
int v[n],sp[n];
fin>>v[0];
for (int i=0; i<n;i++)
sp[i]=0;
sp[0]=v[0];
for (int i=1; i<n; i++)
{
fin>>v[i];
sp[i]=sp[i-1]+v[i];
}
int x=100;
//cout<<transport(n, sp, k, x);
int st=0,dr=256000000,mij,c1,c2;
mij=(st+dr)/2;
c1=transport(n, sp, k, mij-1);
c2=transport(n, sp, k, mij);
while(c1!=1 || c2!=0)
{
if (c1==1 && c2==1)
{
dr=mij;
}
else if(c1==0 && c2==0)
{
st=mij;
}
mij=(dr+st)/2;
c1=transport(n, sp, k, mij-1);
c2=transport(n, sp, k, mij);
}
fout<<mij+1;
// */;
return 0;
}