求助
查看原帖
求助
251074
学习柯学楼主2022/9/22 21:20

代码在vs2019能出正确答案,但是在IDE和评测机出不了。 代码如下

#include<iostream>
#include <stdio.h>
#include<string>
using namespace std;
int n, i, b[300], k, t = 1, j;
long long ans = 1, sum = 1, x = 1;
string a;
int main() {
	cin >> n;
	getchar();
	getline(cin, a);
	for (i = 0; i < n; i++)
	{
		ans = ans * (i+1) % 1000000007;
		b[a[i]]++;
		if (b[a[i]] % 2 != 0)
			k++;
		else k--;
	}
	ans += 1000000007;
	if (k == 0)
	{
		for (i = 1; i <= n / 2; i++)
			sum = sum * i % 1000000007;
		for (i = 0; i < 26; i++)
		{
			t = 1;
			if(b[i+'a']>=2)
			{ 
			for (j = 1; j <= b[i + 'a'] / 2;j++)
			{
				t = t * j;
			}
			for (j = 1; j <= b[i + 'a']; j++)
			{
				sum = sum * j % 1000000007;
			}
			sum = sum / t;
			}
		}
		cout << (ans - sum) % 1000000007;
		return 0;
	}
	else {
		if (k >= 2)
		{ 
			cout << ans % 1000000007;
			return 0;
		}
		for (i = 1; i <= (n - 1) / 2; i++)
			sum = sum * i % 1000000007;
		for (i = 0; i < 26; i++)
		{
			t = 1;
			if (b[i + 'a'] >= 2)
			{ 
				for (j = 1; j <= b[i + 'a'] / 2; j++)
				{
					t = t * j;
				}
				for (j = 1; j <= b[i + 'a']; j++)
				{
					sum = sum * j % 1000000007;
				}
			sum = sum / t;
			}
		}
		for (i = 0; i < 26; i++)
		{
			if (b[i + 'a'] % 2 != 0)
			x = b[i + 'a'];
		}
		cout << (ans - (sum * x)) % 1000000007;
		return 0;
	}
	return 0;
}
2022/9/22 21:20
加载中...