概要
あるコンテストでは、レーティング 1200 以上を brown coder 、1200 未満を ciel coder と呼ぶ。新規参加者のレートは 500 である。
ねこの Lower はこのコンテストに新規参加し、それからいくつかのコンテストに参加した。i 番目のコンテストの終了後のレートは rating[ i ] である。Lower の色( brown or ciel )が何回変わったか求めよ。
解法
有効な i について、rating[ i ] と rating[ i + 1 ] に対応する色が違っている場所の数が答えです。rating の先頭に初期レートである 500 を挿入しておくと一度に処理できます。
コード
#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i ) class TypoCoderDiv2 { public: int count( vector <int> rating ) { rating.insert( rating.begin(), 500 ); const int N = rating.size(); int res = 0; REP( i, 0, N - 1 ) { res += color( rating[i] ) ^ color( rating[ i + 1 ] ); } return res; } bool color( const int r ) { return 1200 <= r; } };