#P2326. Major Scales

    ID: 1327 传统题 1000ms 256MiB 尝试: 6 已通过: 1 难度: 10 上传者: 标签>模拟组合数学字符串Waterloo local 2003.07.05

Major Scales

题目描述

在音乐中,可听频率范围被划分为八度(octave),每个八度覆盖的频率范围为前一个八度的22倍。例如,中央C(middle C)对应的频率为263263 Hz。比中央C低一个八度的频率范围为131.5131.5 Hz至263263 Hz,而高一个八度的频率范围为263263 Hz至526526 Hz。

一个八度包含1313半音阶(chromatic notes),这些音符的频率按固定比例递增。相邻两个半音阶之间的间隔称为半音(semi-tone)或半阶。由于一个八度包含1212个半音,因此半音对应的频率比为1.05931.0593(因为1.059312=21.0593^{12} = 2)。全音(tone)等于22个半音。

虽然使用频率描述音符更为直接,但传统上我们使用特定的名称来表示半音阶的音符,按顺序为:
C,C#,D,D#,E,F,F#,G,G#,A,A#,B,CC, C\#, D, D\#, E, F, F\#, G, G\#, A, A\#, B, C,并在每个新八度重复这一命名规则。

西方音乐通常不会使用所有半音阶音符,而是使用其中的88个音符构成大调音阶(major scale)。大调音阶的88个音符之间的间隔依次为:全音、全音、半音、全音、全音、全音、半音。大调音阶可以从任意半音阶音符开始,该起始音符决定了音阶的调性(key)。例如:

  • C大调的音阶为:C,D,E,F,G,A,B,CC, D, E, F, G, A, B, C
  • F大调的音阶为:F,G,A,A#,C,D,E,FF, G, A, A\#, C, D, E, F

此外,还存在其他音阶(如小调音阶),但本题仅关注无临时变音记号(accidentals)的大调音阶音乐。

任务要求

给定一系列音符,判断这些音符可能属于哪些大调音阶。程序需满足:

  • 仅当所有输入音符均属于某个大调音阶时,才输出该调性
  • 无需考虑音乐听觉问题,仅需按规则计算

输入格式

  • 输入包含多个测试用例,每个测试用例占一行,由一系列半音阶音符组成,以空格分隔。
  • 每行不超过10001000个字符。
  • 输入以END结束。

输出格式

  • 对于每个测试用例,输出一行,列出所有可能的调性(按半音阶顺序排列)。

输入样例 1

C C D F E G A A F G B
A B C D E F G C#
C C D F E G A A F G
C C C C C
END

输出样例 1

C

C F
C C# D# F G G# A#