Pagini recente » Cod sursa (job #2432762) | Cod sursa (job #2352717) | Cod sursa (job #17369) | Cod sursa (job #1422857) | Cod sursa (job #2615371)
#include<bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n,k,a[160001],s,final,Max=-1;
int verificare(int random)
{
int sum_cap=0,nr_drumuri=1;
for(int i=0;i<=n && nr_drumuri<=k;i++)
{
sum_cap+=a[i]; ///adun cap. saltelelor pana depaseste "posibila" capacitate din caut_binara
if(sum_cap>random)
{
sum_cap=a[i]; ///a depasit-o, reinitializez suma pentru a lua valoarea elementului cu ajutorul caruia s-a depasit "posibila" capacitate,
///pentru a putea incarca din nou camionul pentru urmatorul drum
nr_drumuri++; ///astfel, am facut un drum si cresc nr acestora
}
}
if(nr_drumuri<=k) return 1;
else return 0;
}
void caut_binara(int st, int dr)
{
while(st <= dr)
{
int mij = (st+dr)/2;
if(verificare(mij)==1)
{
final=mij;
dr = mij -1;
}
else
{
st = mij+1;
}
}
}
int main()
{
f>>n>>k;
for(int i=1; i<=n; i++)
{
f>>a[i];
s+=a[i]; ///calculez suma capacitatilor saltelelor
if(a[i]>Max)
Max=a[i]; ///capacitatea maxima a unei saltele
}
caut_binara(Max,s); ///trebuie sa ma asigur ca respectivul camion imi poate transporta cea mai mare saltea
g<<final; ///si in caz ca numarul de drumuri maxim este 1, trebuie sa ma asigur ca am un camion cu capacitatea destul de mare pentru toate saltelele la un loc
return 0;
}