50分求调!!!初中小白
查看原帖
50分求调!!!初中小白
1342225
liusizhe88楼主2024/8/3 16:07
#include<bits/stdc++.h>
typedef std::string str;
using namespace std;
vector<long long> arr(26,0);
long long mod=1000000007;
long long jiecheng(long long n){
	long long ans=1;
	for(int i=2;i<=n;i++) ans*=i;
	return ans;
}
bool comp1(long long x,long long y){
	return x>y;
}
long long count(long long n,str a){
	if(a.size()==1) return 1;
	if(a.size()==0) return 0;
	long long flag=0;
	for(int i=0;i<n;i++){
		if(arr[i]%2==1) flag++;
	}
	if((flag>1)||(a.size()%2==0&&flag==1)||(a.size()%2==1)&&flag==0) return 0;
	long long count2=0;
	for(int i=0;i<n;i++){
		count2+=(arr[i]/2);
	}
	return jiecheng(count2);
}

long long f(){
	long long ans=1;
	for(int i=0;i<26;i++){
		ans*=(jiecheng(arr[i])/jiecheng(arr[i]/2));
	}
	return ans;
}
int main(){
	long long n,cnt=0;
	cin>>n;

	str a;
	cin>>a;
	for(int i=0;i<n;i++){
		if(arr[a[i]-'a']==0) cnt++;
		arr[a[i]-'a']++;
	}
	sort(arr.begin(),arr.end(),comp1);
	cout<<(jiecheng(n)-count(cnt,a)*f()+mod)%mod<<endl;
	return 0;
}
2024/8/3 16:07
加载中...