RT,WA # 6,7,9,10
自己想的玄学做法,但是和题解似乎好像也许可能还是比较相似的,求大家帮忙看看错在哪里
#include<bits/stdc++.h>
using namespace std;
const long long M=1e9+7;
long long n,t[30]={0},cnt=0,zimu=0;
long long jiecheng(long long n){
long long ans=1;
for(int i=2;i<=n;i++){
ans*=i;
ans%=M;
}
return ans;
}
int main(){
cin>>n;
if(n==1){
cout<<0;
return 0;
}
char c;
for(int i=0;i<n;i++){
cin>>c;
t[c-'a']++;
}
for(int i=0;i<26;i++){
if(t[i]%2==1){
cnt++;
}
if(t[i]>0) zimu++;
}
if(zimu==1){
cout<<0;
return 0;
}
if(cnt>1){
cout<<jiecheng(n);
return 0;
}
cnt=0;
for(int i=0;i<26;i++){
cnt+=(t[i]/2);
}
cnt=0;
long long huiwen=1;
for(int i=0;i<26;i++){
if(t[i]>0){
huiwen*=(jiecheng(t[i])/jiecheng(t[i]/2));
huiwen%=M;
cnt+=(t[i]/2);
}
}
huiwen*=jiecheng(cnt);
huiwen%=M;
long long ans=(jiecheng(n)+M-huiwen)%M;
cout<<ans;
return 0;
}