intさわだんのBlack History

刹那的レジェンドになりたい。

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;
    }
}