QOJ.ac

QOJ

时间限制: 1.5 s 内存限制: 512 MB 总分: 100

#6470. 循环播放列表

统计

当地一家广播电台发生了硬件故障,导致同一个播放列表陷入了循环播放。配备了音高检测软件后,你需要确定播放列表中歌曲数量的下界。

你已经成功录制了整个循环,从任意一点开始,并在同一点结束。音高检测软件的输出由 $N$ 个检测到的音符组成,按它们被播放的顺序排列。

每个音符有 12 种名称之一:Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#, La, La#, 或 Si。列表中任意两个连续音符之间的间隔称为半音。相隔 12 个半音的音符名称相同;因此,Si 后面的音符称为 Do,依此类推。

每首歌由两个或更多的音符组成,且所有音符都属于同一个大调音阶(major scale)。

所有大调音阶都由其根音(root note)定义,并包含八个音符,其中七个具有不同的名称。从根音到音阶中每个音符的音高偏移量分别为 0, 2, 4, 5, 7, 9, 11 和 12 个半音(第一个和最后一个音符与根音相同)。可以基于任何根音构建大调音阶。例如:

Root +0 Root +2 Root +4 Root +5 Root +7 Root +9 Root +11 Root +12
Do major Do Re Mi Fa Sol La Si Do
Do# major Do# Re# Fa Fa# Sol# La# Do Do#
Re major Re Mi Fa# Sol La Si Do# Re
Re# major Re# Fa Sol Sol# La# Do Re Re#
Mi major Mi Fa# Sol# La Si Do# Re# Mi

……以此类推……

你的任务是确定 $M$,即播放列表包含的最少歌曲数量。

输入格式

输入文件的第一行包含 $N \le 10\,000\,000$,表示检测到的音符数量。接下来的 $N$ 行每行包含一个音符。所有音符的格式如前所述(即首字母大写,其余字母小写)。

输出格式

输出必须包含 $M$。

样例

样例输入 1

8
La
Si
Do
Si
La
Sol
Fa
Mi

样例输出 1

1

样例输入 2

9
Mi
Si
Sol
Do
Re
Fa#
Fa
Do
La

样例输出 2

2

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.