为什么编译错误?
查看原帖
为什么编译错误?
555944
cjd2009楼主2022/6/24 22:27
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll fac[1000001] = { 1,1 }, inv[1000001] = { 1,1 }, facinv[1000001] = { 1,1 }, mat[101][101], n, m;
ll solve(ll n) {
    ll ans = 1, cnt = 1;
    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j) {
            while (mat[i][i]) {
                int x = mat[j][i] / mat[i][i];
                for (int k = i; k <= n; ++k) {
                    mat[j][k] -= x * mat[i][k] % mod;
                    (mat[j][k] += mod) %= mod;
                }
                swap(mat[i], mat[j]), cnt = -cnt;
            }
            for (int k = i; k <= n; ++k)swap(mat[i][k], mat[j][k]);
            cnt = -cnt;
        }
    for (int i = 1; i <= n; ++i)
        ans = ans * mat[i][i] % mod;
    ans *= cnt;
    return (ans + mod) % mod;
}
inline ll C(ll n, ll m) {
    return fac[n] * facinv[m] % mod * facinv[n - m] % mod;
}
inline ll read() {
    ll f = 1, x = 0; char ch = 0;
    do { ch = getchar(); if (ch == '-')f = -1; } while (ch < '0' || ch>'9');
    do { x = x * 10 + ch - '0'; ch = getchar(); } while (ch >= '0' && ch <= '9');
    return f * x;
}
ll a[101], b[101];
int main() {
    int T = read(), mn = 2;
    while (T--) {
        int n = read(), m = read();
        for (int i = mn; i <= 2*max(mn, n); ++i)
            fac[i] = fac[i - 1] * i % mod,
            inv[i] = (mod - mod / i) * inv[mod % i] % mod,
            facinv[i] = facinv[i - 1] * inv[i] % mod;
        mn = 2*max(mn, n);
        for (int i = 1; i <= m; ++i)a[i] = read(), b[i] = read();
        for (int i = 1; i <= m; ++i)
            for (int j = 1; j <= m; ++j)
                mat[i][j] = a[i] <= b[j] ? C(b[j] - a[i] + n - 1, n - 1) : 0;
        printf("%lld\n", solve(m));
    }
    return 0;
}
2022/6/24 22:27
加载中...