求助,50分!!!
查看原帖
求助,50分!!!
747487
贾景铄楼主2023/6/10 12:04
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
long long n;
char a[3000];
long long aik;
long long flag;
unsigned long long chick;
long long mc=1000000007;
map<char, long long> ans;
unsigned long long zdda=1;
int FLAG;
unsigned long long flagpt;
int main() {
	cin>>n>>a;
	chick=n;
	for(int i=int('a');i<=int('z');i++)
	{
		ans[char(i)]=0;
	}
	for(int i=0; i<n; i++) {
		ans[a[i]]++;
	//	cout<<ans[a[i]]<<endl;
	}
	for(int i=int('a'); i<=int('z'); i++) {
		if(ans[char(i)]%2!=0) {
			aik++;
		}
		if(aik==2) {
			flag=1;
			break;
		}
	}
	//cout<<"flag="<<flag;
	if(flag==1) {
		for(int i=n-1; i>1; i--) {
			chick*=i;
		}
		cout<<chick;
		return 0;
	}
	unsigned long long chick;
	unsigned long long chick1;
	for(int i=int('a');i<=int('z');i++)
	{
		if(ans[char(i)]!=0&&ans[char(i)]%2==0)
		{
			chick=ans[char(i)];
			for(int j=ans[char(i)]-1;j>1;j--)
			{
				chick*=j;
			}
			//cout<<"ch0="<<chick<<endl;
			chick1=ans[char(i)]/2;
			for(int j=ans[char(i)]/2-1;j>1;j--)
			{
				chick1*=j;
			}
			//chick1=chick1*chick1;
			zdda*=chick/chick1;
			
			//cout<<"ch1="<<chick1<<endl;
			
			continue;
		}
		if(ans[char(i)]>1&&ans[char(i)]%2==1)
		{
			FLAG=1;
			flagpt=ans[char(i)];
			chick=ans[char(i)]-1;
			for(int j=ans[char(i)]-2;j>1;j--)
			{
				chick*=j;
			}
			//cout<<"ch0="<<chick<<endl;
			chick1=(ans[char(i)]-1)/2;
			for(int j=(ans[char(i)]-1)/2-1;j>1;j--)
			{
				chick1*=j;
			}
			//chick1=chick1*chick1;
			zdda*=chick/chick1;
			
			//cout<<"ch1="<<chick1<<endl;
			
			continue;
		}
	}
	chick=n/2;
	for(int i=n/2-1;i>1;i--)
	{
		chick*=i;
	}
	zdda*=chick;
	if(FLAG==1)
	{
		zdda*=flagpt;
	}
	chick1=n;
	for(int i=n-1;i>1;i--)
	{
		chick1*=i;
	}
	cout<<"hbk="<<chick1<<endl;
	zdda=chick1-zdda;
	cout<<zdda%mc;
	return 0;
}
2023/6/10 12:04
加载中...