AT1898题解

· · 题解

题目传送门:

AT1898

强调问题:

2022.10.06 : 在 AT 题库里千万别打多余的换行!!

如果你用 scanf 读入字符串的话,会报错,像这样:

scanf ("%s", s);

就会报错,因为 scanf 是 C 语言的,而 string 是 C ++ 的特性。

在考试中 RE 是我们最不想遇到的问题,所以为了我们的分数,我们在考试中读入字符串尽量就 cin 就可以了。如果觉得慢,就用快读优化一下

还有一个问题:

钢琴中是没有 # Mi# Xi 的,所以打表不要把他们也打进去 。

思路:

读完了这道题,我的第一反应就是 打表,我们只需要把 每一种情况 罗列出来就可以了。看一下表格。

字母(起始) 按键 答案(最终)
1 Do WBWBWBWWBWBW Fa
2 #Do BWBWBWWBWBWW #Fa
3 Re WBWBWWBWBWWB So
4 #Re BWBWWBWBWWBW #So
5 Mi WBWWBWBWWBWB La
6 Fa BWWBWBWWBWBW #La
7 #Fa WWBWBWWBWBWB Si
8 So WBWBWWBWBWBW Do
9 #So BWBWWBWBWBWW #Do
10 La WBWWBWBWBWWB Re
11 #La BWWBWBWBWWBW #Re
12 Xi WWBWBWBWWBWB Mi

最后我们只需要按照上面的表格模拟一下就可以了。 我们来看一下代码。

代码:


#include <bits/stdc++.h>

using namespace std;

string s;   //c++的好东西

int main () {

    cin >> s;
                  /*按照暴力打表求出此题*/
    if (s.substr (0, 12) == "WBWBWWBWBWBW") printf ("Do");  
    if (s.substr (0, 12) == "BWBWWBWBWBWW") printf ("#Do");
    if (s.substr (0, 12) == "WBWWBWBWBWWB") printf ("Re");
    if (s.substr (0, 12) == "BWWBWBWBWWBW") printf ("#Re");
    if (s.substr (0, 12) == "WWBWBWBWWBWB") printf ("Mi");
    if (s.substr (0, 12) == "WBWBWBWWBWBW") printf ("Fa");
    if (s.substr (0, 12) == "BWBWBWWBWBWW") printf ("#Fa");
    if (s.substr (0, 12) == "WBWBWWBWBWWB") printf ("So");
    if (s.substr (0, 12) == "BWBWWBWBWWBW") printf ("#So");
    if (s.substr (0, 12) == "WBWWBWBWWBWB") printf ("La");
    if (s.substr (0, 12) == "BWWBWBWWBWBW") printf ("#La");
    if (s.substr (0, 12) == "WWBWBWWBWBWB") printf ("Si");  

    return 0;
}

暴力出奇迹。

求通过。