読者です 読者をやめる 読者になる 読者になる

AOJ 1285 Grey Area

問題

Grey Area

問題文の意味がまったく分からなかったのでいろんな方のブログを見てなんとか理解した。

vの数字をwで割ったやつをカウントしていって0から順番にどれぐらい色が必要か見ていく。 問題文さえ読めればなんとかなる

解法

実装するだけ。問題文を読むのに一番労力が必要だった。英語が読めるようになりたい。

心臓に悪いコード

int n, w;

int main(){
  while(scanf("%d%d", &n, &w) && n+w){
    int m = 0, v;
    int tail = 0;
    vi h(100/w+1, 0);
    rep(i, n){
      scanf("%d", &v);
      h[v/w]++;
      if(h[v/w] == 1) tail = max(tail, v/w);
      m = max(m, h[v/w]);
    }

    int num = tail;
    double res = 0;
    rep(i, tail) res += (double)h[i]/(double)m*(double)num--/(double)tail;
    printf("%lf\n", res+0.01);
  }
  return 0;
}