当字符串中只出现数量为奇数的字符时,合法串的情况应该乘上它的数量,为什么我没计算这一步可以AC,算了却只有70分
(未计算版)
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
int n,cnt[30],pd;
char s[2005];
long long ans=1ll,jc[2005];
long long lc(int l,int r)
{
long long ans=1;
for(int i=l;i<=r;i++)
ans=ans*i%mod;
return ans;
}
int main()
{
scanf("%d",&n);
scanf("%s",s+1);
for(int i=1;i<=n;i++)
{
int ch=s[i]-'a'+1;
++cnt[ch];
}
for(int i=1;i<=26;i++)
if(cnt[i]&1)
{
++pd;
}
if(pd>1)
{printf("%lld",lc(1,n));return 0;}
ans=ans*lc(1,n/2)%mod;
for(int i=1;i<=26;i++)
{
ans=ans*lc(cnt[i]/2+1,cnt[i])%mod;
}
ans=(lc(1,n)-ans+mod)%mod;
printf("%lld",ans);
return 0;
}