代码在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;
}