Pagini recente » Cod sursa (job #1872969) | Cod sursa (job #1585673) | Cod sursa (job #188438) | Cod sursa (job #217569) | Cod sursa (job #1009826)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("grupuri.in");
ofstream g("grupuri.out");
int k,n,c[100005],inf=2147000000;
void Read()
{ int i;
f>>k>>n;
for(i=1;i<=n;i++)
f>>c[i];
}
int Ok(int x)
{ int i,j,col,ram,inc,cant;
col=1; ram=x;
for(i=1;i<=n;i++)
{ cant=c[i];
if (cant<=ram)
{ ram-=cant;
if (!ram) {ram=x; col++; if(col>k) return 1;}
}
else
{ inc=x-ram+1;
col++; cant-=ram; ram=x;
if (col>k) return 1;
ram-=min(cant,inc-1);
}
//cout<<ram<<"\n";
}
return 0;
}
int Search()
{ int l=1,r=inf,m;
while(l<r)
{ m=(l+r)/2;
if (Ok(m)) l=m; else r=m-1;
if (Ok(m) && !Ok(m+1)) return m;
//cout<<l<<" "<<r<<"\n";
}
return l;
}
int main()
{ Read();
g<<Search();
return 0;
}