求助
查看原帖
求助
550471
Ice_function楼主2022/10/24 16:46

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<=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++)
	{
		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];
		if (NV_fl) ans=(1ll*ans*(a[NV]+1))%mod;ans%=mod;
	}
	cout<<sum-ans<<endl;
	return 0;
}
2022/10/24 16:46
加载中...