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