关于奇数个字符情况的提问
查看原帖
关于奇数个字符情况的提问
752711
hateful_bug楼主2024/11/7 12:06

当字符串中只出现数量为奇数的字符时,合法串的情况应该乘上它的数量,为什么我没计算这一步可以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)//l*(l+1)*...*(r-1)*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;
}
2024/11/7 12:06
加载中...