[GZOI2011]乐谱变调

成绩 0 开启时间 2013年02月21日 星期四 23:02
折扣 0.8 折扣时间 2013年02月28日 星期四 23:02
允许迟交 关闭时间 2013年02月28日 星期四 23:02
输入文件 music.in 输出文件 music.out

【问题描述】
大家应该听过很多美妙动听的歌曲,也曾经在卡拉OK中唱过不少歌曲。其实,很多歌曲的调子都经过了变调,因为很多歌曲原来的调子一般都偏高,需要把调适当降低,才适合一般人歌唱。现在请你编程解决这个变调的问题,把一个曲谱从原来的调子基础上,升高或降低若干个调,变成一个新的曲谱。

【音阶】
相信大家都见过电子琴,也听过电子琴,琴中的每个白色键,代表的是简谱中的1,2,3,4,5,6,7的音阶,用字母代表即为 C,D,E,F,G,A,B,见下图:
music-1

此外,上面的黑键表示半音,按照上图,从左边到右边的5个黑键代表的半音为:#C,#D,#F,#G,#A
由最左边的音阶C数起到第七个音阶B,中间的黑键和键,均处于一个基准八度区域,在B右边的琴键,比原来的音阶高一个八度区域,称为高八度区域; C音阶左边的琴键(图片没有显示),比原来的音阶低一个八度区域,称为低八度区域。

【乐谱】
一个歌曲的乐谱,包括音阶、节奏、小节线、休止符等元素,这里为了简单表示,只保留音阶这一元素,节奏、小节线、休止符不在此题目中展现。
乐谱中的每个音阶,可以用C,D,E,F,G,A,B,#C,#D,#F,#G,#A 表示。
在乐谱中会牵涉到八度区域的迁移问题,我们使用 “>”、“<” 来变化当前的八度区域。其中“>”表示提高当前八度区域(例如从低八度区域=>基准八度区域),“<”表示降低当前八度区域(例如高八度区域=>基准八度区域)。乐谱一开始的时候,当前八度区域为基准八度区域。

【乐谱变调】
对一个乐谱,提高或者降低N个半音的操作,成为乐谱变调。
首先,对于一个八度区域中,以下音阶均相隔一个半音。
C,#C,D,#D,E,F,#F,G,#G,A,#A,B
然后,B音阶比高它一个八度区域的C音阶,相隔一个半音
变调就是一个简单的升降音阶的操作,只要数着半音阶个数修改音阶即可。例如,C音阶提高6个半音,数过去就是#F,B音阶提高4个音阶,则为下一个八度区域的 #D 音阶,同理,#F降6个半音阶(升-6个半音)则为C。

【输入格式】
输入第一行字符串,包含上面的各个音阶,以及>/<符号,表示一个乐谱,乐谱字符串长度<=200,没有空格和其他字符串。
输入第二行为整数N (-16<=N<=16) ,表示升多少个半音

【输出格式】
输出为一行字符串,代表乐谱。

【输入样例】
CDEFGAB>C
2
【输出样例】
DE#FGAB>#CD