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号