A. Night at the Museum(思维+预处理)Codeforces Round #376 (Div. 2)
原题链接: http://codeforces.com/problemset/problem/731/A

 测试样例
input
zeus
output
18
input
map
output
35
input
ares
output
34
Note
题意: 有一个转盘按字典序围成,初始在 a a a处,现在给出一系列指令,需要你计算完成这些指令的最少转盘次数。
解题思路: 这道题其实非常简单,我们只需要知道我们会怎么转这个转盘即可,我们不会跨过半个转盘去转到下一个字母,如果距离差大于13,那么我们完全可以反方向转到此处。所以我们自然可以先预处理计算出对应字母的转数,最后直接模拟计算即可。
AC代码
/*
*blog:https://blog.csdn.net/hzf0701
*邮箱:unique_powerhouse@qq.com
*注:文章若有任何问题请私信我或评论区留言,谢谢支持。
*/
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
using namespace std;
typedef long long ll;
const int maxn=1e5;//数组所开最大值
const int mod=1e9+7;//模
const int inf=0x3f3f3f3f;//无穷大
string s;
map<pair<char,char>,int> p;
void init(){
    for(char i='a';i<='z';i+=1){
        for(char j='a';j<='z';j++){
            if(abs(j-i)>13){
                p[make_pair(i,j)]=26-abs(j-i);
            }
            else{
                p[make_pair(i,j)]=abs(j-i);
            }
        }
    }
}
void solve(){
    int cnt=p[make_pair('a',s[0])];
    int len=s.size();
    rep(i,1,len-1){
        cnt+=p[make_pair(s[i-1],s[i])];
    }
    cout<<cnt<<endl;
}
int main(){
    init();
    while(cin>>s){
        solve();
    }
    return 0;
}


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号