紙媒体で管理するとなくなりがちなのでブログで進捗などを管理することにしました
※殆どの記事は自分自身のためだけにかいています.他人に見せられるレベルには至っていません...

ABC039_C

文字列一致の問題
鍵盤の右20個の文字列が与えられるので今いる場所を当てるというやつ.

#include <bits/stdc++.h>
using namespace std;

string func(string str,int n){
    /*
        文字列strを整数n倍し文字列を返す関数
    */
    string tmp = str;
    for(int i=1;i<n;i++){
        str += tmp;
    }
    return str;
}

int main()
{
    string s;
    cin>>s;
    string keyboard = "WBWBWWBWBWBW";
    string tmp = func(keyboard,3);
    int res = -1;
    for(int i=0;i<12;i++){
        if(s == tmp.substr(i,20)){
            res = i;
            break;
        }
    }
    switch(res){
        case -1:cout<<"fuck";break;
        case 0:cout<<"Do";break;
        case 2:cout<<"Re";break;
        case 4:cout<<"Mi";break;
        case 5:cout<<"Fa";break;
        case 7:cout<<"So";break;
        case 9:cout<<"La";break;
        case 11:cout<<"Si";break;
    }
    cout<<endl;
    return 0;

}

Pythonの辞書的な使い方を学んだ.

map<string, string> res = {
		make_pair("WBWBWWBWBWBW", "Do"),//make_pair(その位置から右20個の文字列, その位置)
		make_pair("WBWWBWBWBWWB", "Re"),
		make_pair("WWBWBWBWWBWB", "Mi"),
		make_pair("WBWBWBWWBWBW", "Fa"),
		make_pair("WBWBWWBWBWWB", "So"),
		make_pair("WBWWBWBWWBWB", "La"),
		make_pair("WWBWBWWBWBWB", "Si"),
	};
cout << res[S.substr(0, 12)] << endl;//与えられた文字列がkeyになるmap<string,string>型resの要素