torus711 のアレ

主に競技プログラミングの問題について書きます

TopCoder, SRM 618, Division 2, Level 1 : WritingWords

問題概要

 キーが一つしか無い携帯電話で文字を入力することを考える。すなわち、アルファベットの n 番目( 1-indexed )の文字を入力するためには、キーを n 回押す必要があるとする。
 英大文字からなる文字列 word を入力するために、キーを押さなければならない回数を求めよ。


解法

 ある文字 c を入力するためには、c - 'A' + 1 回のキー入力が必要になります。従って、word の各文字 c について、c - 'A' + 1 の値を計算して総和をとることで、キーを押さなければならない回数が求まります。

コード

#define ALL( c ) (c).begin(), (c).end()

class WritingWords
{
public:
	int write(string word)
	{
		return accumulate( ALL( word ), 0 ) - word.size() * ( 'A' - 1 );
	}
};