Cod sursa(job #1009826)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 13 octombrie 2013 21:31:52
Problema Grupuri Scor 66
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#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;
}