概要
0 〜 9 からなる数列が与えられる。
それぞれの数字の出現数についてのヒストグラムを作成せよ。
解法
適当なやりかたで数えてヒストグラムを作るだけです。
強いて言えば、横向きに作っておいてから行と列を入れ替える方が実装が楽だと思います。
コード
typedef vector<int> VI; typedef vector<string> VS; #define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i ) #define ALL( c ) (c).begin(), (c).end() class ValueHistogram { public: vector <string> build( vector <int> values ) { VI count( 10, 0 ); REP( i, 0, values.size() ) { count[ values[i] ] ++; } int m = *max_element( ALL( count ) ); VS tmp( 10, string( m + 1, '.' ) ); REP( i, 0, 10 ) { fill( tmp[i].begin(), tmp[i].begin() + count[i], 'X' ); } VS res( m + 1, string( 10, '.' ) ); REP( i, 0, tmp.size() ) { REP( j, 0, tmp[i].size() ) { res[j][i] = tmp[i][j]; } } reverse( ALL( res ) ); return res; } ];