yukicoder no.21

問題文
http://ch.nicovideo.jp/programing/blomaga/ar612968

解答

#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

#define allof(c) (c).begin(), (c).end()

int main() {
  int N, K;
  cin >> N >> K;
  vector<int> ns(N);
  for(int i=0; i<N; i++)
    cin >> ns[i];
  
  cout << *max_element(allof(ns)) - *min_element(allof(ns)) << endl;
  return 0;
}

メモ
まずグループ分けについての記述があったので、グループ分けの組み合わせを想像した。再帰かループか、あるいは式を用いて解答するものかと考えた。

次に細かい制約が気になった。まず平均という言葉であるが、平均最大化でもなければただ和を考えるだけでよいことが多いからだった。次に小数点切り上げという意味について考えようとしたが、これは何を意味するのか分からず不自然だと感じた。この時点ではグループ分けのイメージはまだ払拭しきれていなかったかもしれない。サンプルを見てから、グループ分けが意味のないことであるのを具体的に確認して解答を記述するに至った。