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の要素