红石音乐
题号:NC206666
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述


在Minecraft这个游戏中,制作红石音乐可谓是一项复杂又庞大的工程。小S在游戏中搭建了一首钢琴曲,这消耗了她将近半个月的时间,其中使用了数千个音符盒。小S希望你帮她计算她在制作时最少需要调节音符盒的次数,这样她就可以向朋友们炫耀一下(顺便估计一下鼠标的剩余寿命)。

在编程解决这个问题之前,你需要了解以下说明。


小S拿到的是钢琴曲的五线谱,我们以字母的方式记音调,也就是在钢琴白键上依次写下A B C D E F G,并在其后写下该字母是第几次出现;相邻两个字母之间相差一个调,特别地,B和C、E和F之间差半个调。图示如下:


升半调使用在字母后加‘#’表示,如C4#;降半调使用在字母后加‘b’表示,如D4b;注意,部分音调可以有两种不同的表示方法,例如C4#和D4b、F3b和E3是同一个音调。

小S制作红石音乐的方式是这样的:对于每一个五线谱上的音符,她使用一个音符盒来表示(无论它的长度是多少),再通过红石中继器等方块将音符盒连在一起,就可以控制音符盒在什么时刻播放了。

音符盒的运行机制是这样的(使用了特别的材质包):当音符盒收到一个红石信号时会发出一个固定音调的钢琴声,右键点击这个音符盒一次可以让它发出的声音升高半个调;放在不同方块上的初始音调是不一样的。具体如下:

方块 初始音调
木板 F1#
沙子 F2#
泥土 F3#
玻璃 F4#
石头 F5#

输入描述:

输入数据第一行包含一个整数n,下一行有若干个字符串,之间用空格隔开,每个字符串代表一个音符的音调。保证输入的音高在可以用音符盒表示的范围内(即 [F1#,F7#]),字符串不会超过100,000个。

输出描述:

输出一个整数,表示最少需要调节音符盒的次数。
示例1

输入

复制
14
C4 C4 G4 G4 A5 A5 G4 F4 F4 E4 E4 D4 D4 C4

输出

复制
85

说明

前两个音符盒放置在泥土上,各调节6次;第3~7个音符盒放置在玻璃上,各需要调节1次、1次、3次、3次、1次;第8~14个音符盒放置在泥土上,各需要调节11次、11次、10次、10次、8次、8次、6次;总计85次。
示例2

输入

复制
5
F1# F2# F3# F4# F5#

输出

复制
0

说明

五个音符盒分别放置在木板、沙子、泥土、玻璃、石头上,无需调节音符盒。