简单模拟

代码:

#include<iostream>
#include<cstring>
using namespace std;
//预处理
int a[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
int belong[26]={1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8};
char c[105];
int solve(int n){
    int ans=a[c[1]-'a'];
    for(int i=2;i<=n;++i){
    	//如果前一个字符与当前字符属于同一个按键
        if(belong[c[i-1]-'a']==belong[c[i]-'a'])    ans+=2+a[c[i]-'a'];
        //不属于同一个按键
        else ans+=a[c[i]-'a'];
    }
    return ans;
}
int main(){
    while(~scanf("%s",c+1)){
        int n=strlen(c+1);
        printf("%d\n",solve(n));
    }
    return 0;
}