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); } }
キャストをどのくらいすればいいのかわからなくて、いっぱいしちゃう。