アットウィキロゴ

Organize Your Train part II

1142 : Organize Your Train part II



解説

文字列を分割・反転させてできる文字列の種類を出力する。
問題文自体は簡単だけど、問題はプログラムをどう書くか。
C++だとSTLがあるので、重複を許さない集合setに作った文字列を片っ端から突っ込んでいき、集合の要素数を出力すればいい。

プログラム

C


C++

#include <iostream>
#include <string>
#include <set>
#include <algorithm>
using namespace std;
 
int subTrain(string train) {
    set<string> sstr;
 
    sstr.insert(train);
    for (unsigned i = 1; i < train.length(); ++i) {
        string front = train.substr(0, i);
        string back = train.substr(i);
 
        //sstr.insert(front + back);
        sstr.insert(back + front);
 
        reverse(front.begin(), front.end());
        sstr.insert(front + back);
        sstr.insert(back + front);
 
        reverse(back.begin(), back.end());
        sstr.insert(front + back);
        sstr.insert(back + front);
 
        reverse(front.begin(), front.end());
        sstr.insert(front + back);
        sstr.insert(back + front);
   } 
   return sstr.size();
}

int main()
{
    int n;
    cin >> n;
 
    for (int i = 0; i < n; ++i) {
        string train;
        cin >> train;
 
        cout << subTrain(train) << endl;
 
    }
 
    return 0;
}

Java

最終更新:2012年12月06日 21:29