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