Cod sursa(job #2669398)
| Utilizator | Data | 6 noiembrie 2020 21:03:56 | |
|---|---|---|---|
| Problema | Transport | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.02 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, v[16001],i,st,dr,mij,bs,tv[16001],drum,k,sum;
int main()
{
fin>>n>>k;
for(i=1;i<=n;i++){
fin>>v[i];
sum+=v[i];
}
st=1;
dr=sum;
for(i=0;i<=sum;i++)
tv[i]=i;
while(st<=dr)
{
mij=(st+dr)/2;
//fout<<mij<<endl;
bs=0;
drum=0;
for(i=1;i<=n && drum<=k;i++)
{
bs+=v[i];
if(bs>tv[mij])
{
//fout<<bs<<" ";
drum++;
bs=0;
if(v[i]<=tv[mij])
i--;
}
}
if(bs!=0)
{
bs=0;
drum++;
}
//fout<<drum<<endl;
if(drum<k)
dr=mij-1;
else
if(drum>k)
st=mij+1;
else
break;
}
fout<<mij;
return 0;
}
