方法一:
暴力枚举全排列并进行去重,输出去重后的方案数
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
using namespace std;
map<string,int> mp;
int main()
{
string s="aaabbbbccccc";
int size=s.size();
int cnt=0;
do{
if(!mp[s])cnt++;
for(int i=0;i<size;i++){
string st="";
for(int j=i;j<size;j++)st+=s[j];
for(int j=0;j<i;j++)st+=s[j];
mp[st]++;
reverse(st.begin(),st.end());
mp[st]++;
}
}while(next_permutation(s.begin(),s.end()));
cout<<cnt<<endl;
return 0;
}
方法二:
数学排列组合
(C(12,3)*C(9,4)/12-C(5,1)*C(4,2))/2+C(5,1)*C(4,2)
数学不好,待补