PKU 3388 Japanese Puzzle

http://poj.org/problem?id=3388

n*nの正方形をk種類のピースを使って埋める。
このとき、最初の何行かを全く同じピース構成にしたい。
最大何行を同じ構成にできるか求めろというような問題


二分探索する。

int in[50000];

main(){
  int n,k;
  scanf("%d%d",&n,&k);
  rep(i,k) scanf("%d",in+i);
  int low=1,up=n+1;
  while(low+1<up){
    int mid=low+up>>1;
    int su=0;
    rep(i,k) su += in[i]/mid;
    if(su>=n) low=mid;
    else up=mid;
  }
  cout << low << endl;
  int cnt=0;
  rep(i,k){
    while(in[i]>=low && cnt<n){
      cout << i+1 << endl;
      in[i] -= low;
      ++cnt;
    }
  };
}