Codeforces Round #376A (div2)
Night at the Museum
题意:
有一个转盘,26个英文字母均匀分布在转盘边缘,转针初始位置在字母a,每次只能转动到相邻的字母,然后输入一个由26个字母组成的字符串(最长100),不复位地依次转动到相应的字母位置,问:一共需要转多少次?编程实现。
Input:
输入一个字符串,最长100,由26个英文字母组成。
Output:
输出需要转动的次数(整数)。

解题思想:
由于一圈字母中“..za..”段是不连续的,所以需要分情况讨论,我是这么分的:
以转针所指字母pointer和圆心连线为轴,轴右侧(即<pointer,pointer+13或pointer-13>),除了转针指向‘a’时,其它时刻轴两侧肯定有一侧字母连续 另一侧字母无法连续(包含"za"串) 。
轴左右指的是将轴竖直放置,转针一头在上,此时的左右侧 。
不难看出pointer以‘n’为界限,小于‘n’时不连续段在轴左侧,大于‘n’时不连续段在轴右侧。如下图:

最后代码:
# include <iostream>
# include <string>
using namespace std; int main(void)
{
int clockLetter(string c);
string s;
int numStep;
cin >> s; numStep = clockLetter(s); cout << numStep << endl;
return ;
} int clockLetter(string c)
{
int n = ; // 步数,初值为0
int i;
char pointer = 'a'; // 转针初始值为‘a’ for(int i=;i<c.length();i++)
{ // 以转针所指字母和圆心连线为轴,轴右侧(即<pointer,pointer+13或pointer-13>),除了转针指向‘a’时,其它时刻轴两侧肯定有一侧字母连续 另一侧字母无法连续(包含"za"串) 。
// 轴左右指的是将轴竖直放置,转针一头在上,此时的左右侧
if(pointer <= 'n') // 此时轴左侧字母不连续
{
if(c[i]>=pointer&&c[i]<=pointer+) // 连续段
{
n += c[i]-pointer;
}
else if(c[i]>pointer+) // 不连续段 1
{
n += - (c[i]-pointer);
}
else if(c[i]<pointer) // 不连续段 2
{
n += pointer-c[i];
}
}
else if(pointer > 'n') // 此时轴右侧字母不连续
{
if(c[i]<=pointer&&c[i]>=pointer-) // 连续段
{
n += pointer-c[i];
}
else if(c[i]>pointer) // 不连续段 3
{
n += c[i] - pointer;
}
else if(c[i]<pointer-) // 不连续段 4
{
n += - ( pointer - c[i] );
}
} pointer = c[i]; // 在转下一个字母的时候,让指针停在当前位置,不复位
} return n;
}
C++ Code
结果测试:

Codeforces Round #376A (div2)的更多相关文章
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- 【前行】◇第3站◇ Codeforces Round #512 Div2
[第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- Codeforces Round #564(div2)
Codeforces Round #564(div2) 本来以为是送分场,结果成了送命场. 菜是原罪 A SB题,上来读不懂题就交WA了一发,代码就不粘了 B 简单构造 很明显,\(n*n\)的矩阵可 ...
- Codeforces Round #361 div2
ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...
- Codeforces Round #626 Div2 D,E
比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...
- CodeForces Round 192 Div2
This is the first time I took part in Codeforces Competition.The only felt is that my IQ was contemp ...
- Codeforces Round #359 div2
Problem_A(CodeForces 686A): 题意: \[ 有n个输入, +\space d_i代表冰淇淋数目增加d_i个, -\space d_i表示某个孩纸需要d_i个, 如果你现在手里 ...
- Codeforces Round #360 div2
Problem_A(CodeForces 688A): 题意: 有d天, n个人.如果这n个人同时出现, 那么你就赢不了他们所有的人, 除此之外, 你可以赢他们所有到场的人. 到场人数为0也算赢. 现 ...
随机推荐
- OpenGL快问快答
OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-8 测试领域对象 问题 你想为领域对象创建单元测试. 这主要用于,测试特定的数 ...
- Atitit 边缘检测原理attilax总结
Atitit 边缘检测原理attilax总结 1. 边缘检测的概念1 1.1. 边缘检测的用途1 2. 边缘检测方法分类1 3. 边缘检测的基本方法2 3.1. Roberts边缘检测算子2 3.2. ...
- C#设计模式-代理模式
在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替 ...
- 设计模式之里氏代换原则(LSP)
里氏代换原则(Liskov Substitution Principle, LSP) 1 什么是里氏代换原则 里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的O ...
- [转]Linux常用命令
系统信息arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / ...
- CTE 递归查询
使用CTE进行递归查询,能够实现对层次结构的数据的快速访问,非常有用. TSql CTE 递归原理探究 TSql 分层和递归查询 1,CTE的递归结构 递归查询的结构包括两部分:起始点和迭代公式. 使 ...
- 深入理解DOM事件类型系列第五篇——文本事件
× 目录 [1]change [2]textInput [3]input[4]propertychange[5]兼容 前面的话 如果DOM结构发生变化,触发的是变动事件:如果文本框中的文本发生变化,触 ...
- TSQL语句练习题
1. 查询Student表中的所有记录的Sname.Ssex和Class列. select Sname,Ssex,Class from Student 2. 查询教师所有的单位即不重复的Depart列 ...
- Android自定义Dialog(美化界面)
前言:在做项目的时候,发现dialog界面太丑陋,从csdn上下载了一份自定义dialog的源码,在他的基础上对界面进行美化...有需要的朋友可以直接拿走 效果图如下: 主要代码: /** * 自定义 ...