50分求大佬帮助
查看原帖
50分求大佬帮助
353881
szmetroline20楼主2020/10/18 12:50

代码如下//TLE

#include <iostream>
using namespace std;
const long long mod = 998244353;
long long f[1000005] = {1, 1};
void init(int a) {
    for (int i = 2; i <= a; i++) f[i] = f[i - 1] * i % mod;
}
int sum[1000005];
long long cantor(int n){
    long long ans = 0;
    for (int i = 1; i < n; i++) {
        ans += sum[i] * f[n - i];
        ans %= mod;
    }
    return (ans + 1) % mod;
}
int main() {
    int a[1000005], b;
    scanf("%d", &b);
    init(b);
    for (int i = 1; i <= b; i++) scanf("%d", &a[i]);
    for (int i = 1; i < b; i++)
        for (int j = i + 1; j <= b; j++)
            if (a[j] < a[i]) sum[i]++;
    printf("%lld", cantor(b));
    return 0;
}
2020/10/18 12:50
加载中...