AOJ 0130 - Train
1文字対策で解決.最大値だけが敵ではないですね.
適当な文字から初めて先頭を求めます.そして,逆順すれば答えとなります.
この解法結構好きだ.
#include <iostream> #include <map> int main(){ int n; std::cin >> n; std::string s; while(n--){ std::cin >> s; if(s.size() == 1){//1文字対策 std::cout << s << std::endl; continue; } int pos = 0; while(pos = s.find("-", pos), pos != std::string::npos){ s.replace(pos, 1, ""); } std::map<char, char> m, rm; for(int i=1;i<s.size();i+=2){ if(s[i] == '>') m[s[i+1]] = s[i-1], rm[s[i-1]] = s[i+1]; else m[s[i-1]] = s[i+1], rm[s[i+1]] = s[i-1]; } char end = (*m.begin()).first; while(m[end] != '\0'){ end = m[end]; } //while終了時点でendはstartとなる while(rm[end] != '\0'){ std::cout << end; end = rm[end]; } std::cout << end << '\n'; } }