Pagini recente » Cod sursa (job #2357666) | Cod sursa (job #1898359) | Cod sursa (job #2547040) | Cod sursa (job #1531317) | Cod sursa (job #1009827)
#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+1; else r=m-1;
}
if (!Ok(l))
{ if (Ok(l-1)) return l-1;
else return 0;
}
return l;
}
int main()
{ Read();
g<<Search();
return 0;
}