ICPC 国内予選2006B 列車の編成パートII (☆) AOJ1142
シミュレーションやるだけ。setを使うと楽。
#include <bits/stdc++.h> #define chmin(a, b) ((a)=min((a), (b))) #define chmax(a, b) ((a)=max((a), (b))) #define fs first #define sc second #define eb emplace_back using namespace std; typedef long long ll; typedef pair<int, int> P; typedef tuple<int, int, int> T; const ll MOD=1e9+7; const ll INF=1e18; int dx[]={1, -1, 0, 0}; int dy[]={0, 0, 1, -1}; int main(){ int m; cin >> m; string train; while(cin >> train){ set<string> s; s.insert(train); for(int i = 1;i < train.length();i++){ string a,b,t_a,t_b; for(int j = 0;j < i;j++){ a += train[j]; } for(int j = 0;j < i;j++){ t_a += a[i - 1 - j]; } for(int j = i;j < train.length();j++){ b += train[j]; } for(int j = 0;j < train.length() - i;j++){ t_b += b[train.length() - i - 1 - j]; } s.insert(a + b); s.insert(b + a); s.insert(t_a + t_b); s.insert(t_a + b); s.insert(a + t_b); s.insert(t_b + t_a); s.insert(t_b + a); s.insert(b + t_a); } cout << s.size() << endl; } }