为什么我RE
查看原帖
为什么我RE
282080
NewJeanss楼主2020/8/12 10:57
#include <bits/stdc++.h>
#define p 1000000007
using namespace std;
char s[2005];
long long cnt[30],f[2005],inv[2005],ans;
long long P(long long n,long long m){
	return f[n]*inv[f[n-m]]%p;
}
int main(){
	long long ji_num,n,len;
    f[0]=f[1]=1;
	for(int i=2;i<=2000;i++)
		f[i]=f[i-1]*i%p;
	inv[1]=1;
	for(int i=2;i<=2000;i++)
		inv[i]=(p-(p/i))*inv[p%i]%p;
	while(cin>>n>>s){
		ji_num=0; memset(cnt,0,sizeof(cnt));
		for(int i=0;i<n;i++)
			cnt[s[i]-'a'+1]++;
		for(int i=1;i<=26;i++)
			if(cnt[i]&1) ji_num++;
		if(ji_num>1){
			cout<<f[n]%p<<endl;
			continue;
		}
		ji_num=1;
		for(int i=1;i<=26;i++){
			if(cnt[i]&1) ji_num=cnt[i];
			cnt[i]>>=1; 
		}
		ans=f[n/2]*ji_num%p;
		for(int i=1;i<=26;i++){
			if(cnt[i]==0) continue;
			ans=ans%p*P(cnt[i]*2,cnt[i])%p;
		}
		cout<<(f[n]-ans+p)%p<<endl;
	}
	return 0;
}
2020/8/12 10:57
加载中...