求助
查看原帖
求助
550471
Ice_function楼主2022/10/25 15:22

rt,评测

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e3,mod=1e9+7;

int n,a[N],inv[N];

long long C(int a,int b)
{
	return (1ll*inv[a]/(1ll*inv[b]*inv[a-b]))%mod;

}
signed main()
{
	scanf("%d",&n);
	string k;cin>>k;
	for (int i=1;i<=n;i++) a[k[i-1]-'a'+1]+=1;
	inv[0]=1;
	for (int i=1;i<=N;i++) inv[i]=(inv[i-1]*i)%mod;
	long long sum=inv[n];
	int NV=-1,NV_fl=0;//for (int i=1;i<=26;i++) cout<<i<<" "<<a[i]<<endl;
	for (int i=1;i<=n;i++) if (a[i]%2==1) NV=i,NV_fl++;
	if (NV_fl>1 || NV_fl==1 && n%2==0){cout<<sum<<endl;return 0;}
	if (NV!=-1) a[NV]--,n--;
	long long ans=1;
	n/=2;
	for (int i=1;i<=30;i++)
	{//cout<<ans<<endl;
		a[i]/=2;
		if (a[i]==0) continue;
		int u=C(n,a[i]);
		if (i==NV) ans*=1ll*u*inv[a[i]*2+1]%mod,ans%=mod,n-=a[i];
		else ans*=1ll*u*inv[a[i]*2]%mod,ans%=mod,n-=a[i];
	}
	ans=sum-ans;
	if (ans<0) ans+=mod;
	cout<<ans<<endl;
	return 0;
}
2022/10/25 15:22
加载中...