Single Round Match 408 Div1 250pt

Div1(レーティングが高くないと参加できない一軍)の過去問を解いてみる。まだ一軍には入れないけど。

問題:ろうそくが何本かある。夜の間ろうそくをつける。1日目は1本、2日目は2本点灯する。1日点灯するとろうそくは1インチ縮む。ろうそくの長さのvectorが与えられるので、何日つけられるか答えよ。
http://www.topcoder.com/stat?c=problem_statement&pm=8467&rd=12180

たとえば{2, 2, 2}ならまず1日目点灯した後{1, 2, 2}になって、2日目にまだ2インチのろうそく2本を点灯し{1, 1, 1}になって、それから3日目に全部点灯するので3日。2日目にうっかり初日につかったろうそくに火をつけると{0, 1, 2}になっちゃって3日目に3本点灯することができなくなるのでダメだよ、という話。


要するに長いものから順番に点灯すればいいんだよね。

  int numberOfNights(vector <int> candles) {
    int N = candles.size();
    for(int i=1; i<N+1; ++i){
      //cout << "candles: "; iter_print(candles.begin(), candles.end());
      sort(candles.begin(), candles.end(), greater<int>());
      //cout << "candles(sorted): "; iter_print(candles.begin(), candles.end());
      for(int j=0; j<i; j++){
	if(candles[j] == 0) return i - 1;
        candles[j]--;
      }
    }
    return N;
  }

うーん、あっさりパスした。187.99pt。一軍はもっと難しいのかと思ってたけど拍子抜け。500ptも解こう。