Cod sursa(job #2343282)

Utilizator AnnaLipianuLipianu Ana AnnaLipianu Data 13 februarie 2019 20:53:49
Problema Grupuri Scor 64
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
using namespace std;
int v[100005],a[100005][1001];
int main()
{
    long long s=0,s1=0;
    freopen("grupuri.in","r",stdin);
    freopen("grupuri.out","w",stdout);
    int k,n,i,st,dr,ok,x,i1,j1,y,nr,k1,dr1,cop;
    scanf("%d%d",&k,&n);
    for(i=1;i<=n;i++)
    {
    	scanf("%d",&v[i]);
    	s=s+v[i];
    	if(v[i]<k)
		{
			cop=i;
			s1=s1+v[i];
		}
    }
    st=1;
    dr=s/k;
    if(v[n]<=dr)
		printf("%d",dr);
	else
	{
		k1=k-(n-cop);
		dr1=s1/k1;
		if(v[cop]<=dr1)
		printf("%d",k1+n-cop);
		else
		{
		while(st<=dr)
		{
			ok=0;
			x=(st+dr)/2;
			i1=j1=1;
			for(i=1;i<=n&&i1<=k&&v[i]<x;i++)
			{
				y=v[i];
				while(j1<=x&&y!=0)
				{
					a[i1][j1]=i;
					y--;
					j1++;
				}
				if(j1==x+1)
				{
					j1=1;
					i1++;
				}
				while(y!=0)
				{
					a[i1][j1]=i;
					y--;
					j1++;
				}
			}
			if(i!=n+1)
				i1=i1+(n-i+1);
			if(i1>=k+1)
			ok=1;
			if(ok==1)
			{
				nr=x;
				st=x+1;
			}
			else
				dr=x-1;
		}
		printf("%d",nr);
		}
	}
    return 0;
}