2895 Best SMS to Type

問題概要

携帯電話でアルファベットを打つ。(キーは標準的なマッピング
キーを一度押すのにはp秒かかり、
同じキーにマップされた文字が連続した場合ウェイトがw秒必要である。(ただしスペースは例外)


p,wおよび入力する文字列が与えられたとき、入力にかかる時間を求めよ。

解法

定義にしたがって実装すればよい。

ソースコード

char *let[]={" ","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
int key[256],time[256]; char in[1001];

int main(){
	rep(i,9)for(int j=0;let[i][j];j++){
		key[let[i][j]]=i+1;
		time[let[i][j]]=j+1;
	}
	int t,a,b; scanf("%d",&t);
	rep(T,t)
	{
		scanf("%d%d ",&a,&b); gets(in);
		int s=0;
		for(int i=0;in[i];i++){
			if(in[i]==' '){
				s+=a; continue;
			}
			if(i&&key[in[i]]==key[in[i-1]])s+=b;
			s+=time[in[i]]*a;
		}
		printf("%d\n",s);
	}
	return 0;
}