Cod sursa(job #2930434)
| Utilizator | Data | 28 octombrie 2022 14:07:52 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.79 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in ("transport.in");
ofstream out("transport.out");
#define maxN 16000
int v[maxN+1];
int main(){
int n,k,maxi=-1;
long long sum=0;
in>>n>>k;
for(int i=1;i<=n;i++){
in>>v[i];
sum+=v[i];
if(v[i]>maxi){
maxi=v[i];
}
}
int st=maxi,dr=sum,sol=-1;
while(st<=dr){
int mij=(st+dr)/2;
int tr=1,l=0;
for(int i=1;i<=n;i++){
if(l+v[i]<=mij){
l+=v[i];
}
else{
tr++;
l=v[i];
}
}
if(tr>k){
st=mij+1;
}
else{
sol=mij;
dr=mij-1;
}
}
out<<sol;
}
