Problem 1285 : Grey Area

Problem A: Grey Area
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=1285

  • 概要

greyさんが棒グラフを書くんだけど、インクいくらくらい使う?
以下の条件で。

1, 一番高い棒グラフを規定の高さに合わせ高さのスケールの基準を決める。
2, 一番右の棒グラフは高さを持たないといけない。
3, 一番左の棒グラフは真っ黒一番右は真っ白
4, 一番左から一番右まで同じ量でインクは現象していく。
5, 棒グラフが示す値の範囲は与えられた通りのものを守る。

  • 解法

かくだけ。 
読むのが大変だった。
っていうか、勘違いしまくりだった。
よめればさほど苦労しない。

  • ソース
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cstdlib>
#include<cstdio>
#include<cmath>

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define pb         push_back
#define mp         make_pair
#define vint       vector<int>
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)
#define lli	    long long int
#define ld	    long double

#define N 100

using namespace std;


main(){ 

  int n, w;
  while(cin >> n >> w){
    if(n + w == 0)break;
    int D = N/w+1;
    int t[D], maxi=0;
    fill(t, t+D, 0);
    rep(i, n){
      int tmp;
      cin >> tmp;
      t[tmp/w]++;
      maxi = max(t[tmp/w], maxi);
    }
    int cnt = 0;
    rep(i, D){
      int now = D - 1 - i;
      if(t[now] != 0)break;
      cnt++;
    }

    double sum = 0.01;
    int W = D - cnt;
    rep(i, W){
      sum += ((double)t[i]/maxi)*((double)(W- i-1)/(double)(W-1));
    }

    printf("%.7lf\n", sum);
  }
}

キャストをどのくらいすればいいのかわからなくて、いっぱいしちゃう。