Pagini recente » Cod sursa (job #3189912) | Cod sursa (job #70211) | Cod sursa (job #2942821) | Cod sursa (job #2842424) | Cod sursa (job #3156137)
/*
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
vector<int>v;
int n,k;
int sum=0;
int maxx=-1;
int cautBin()
{
int st=maxx;
int dr=sum;
int rasp=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
int s=0;
int cont=1;
for(int i=1; i<=n; i++)
{
if(s+v[i]>mij)
{
cont++;
s=v[i];
}
else
{
s+=v[i];
}
}
if(cont<=k)
{
dr=mij-1;
rasp=mij;
}
else
{
st=mij+1;
}
}
return rasp;
}
void read()
{
cin>>n>>k;
v.clear();
v.resize(n+1);
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
}
void solve()
{
read();
for(int i=1; i<=n; i++)
{
maxx=max(maxx,v[i]);
sum+=v[i];
}
cout<<cautBin();
}
int main()
{
int t;
t=1;
while(t--)
{
solve();
}
}
*/
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
vector<int>v;
int n,k;
int cautBin()
{
int st=1;
int dr=256000000;
int rasp=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
int s=0;
int cont=1;
bool ok=true;
for(int i=1; i<=n; i++)
{
if(v[i]>mij){
ok=false;
break;
}
if(s+v[i]>mij)
{
cont++;
s=v[i];
}
else
{
s+=v[i];
}
}
if(cont<=k && ok)
{
dr=mij-1;
rasp=mij;
}
else
{
st=mij+1;
}
}
return rasp;
}
void read()
{
cin>>n>>k;
v.clear();
v.resize(n+1);
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
}
void solve()
{
read();
cout<<cautBin();
}
int main()
{
int t;
t=1;
while(t--)
{
solve();
}
}