Submission #75559531


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define int ll

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int MXN = 2000000;
vector<int>fact(MXN+10);
vector<int>inv(MXN+10);
const int mod = 998244353;
int modpow(int x, int y) {
    return !y?1:((y % 2 ? x : 1) * modpow((x * x) % mod, y / 2)) % mod;
}
int choose(int x, int y){
    if(y>x || x < 0 || y < 0)return 0;
    return (fact[x]*inv[y]%mod)*inv[x-y]%mod;
}
int permute(int x, int y){
    if(y>x || x < 0 || y < 0)return 0;
    return (fact[x]*inv[x-y])%mod;
}
void precalc(){
    fact[0] = 1; inv[0] = 1;
    for(int i = 1; i<=MXN; i++){
        fact[i] = fact[i-1]*i%mod;
    }
    inv[MXN] = modpow(fact[MXN],mod-2);
    for(int i = MXN-1; i>0; i--){
        inv[i] = inv[i+1]*(i+1)%mod;
    }
}
int fix(int x){
    x%=mod;
    if(x<0)x+=mod;
    return x;
}
int inverse(int x){
    return modpow(x,mod-2);
}
int starsbars(int n, int k){
    return choose(n+k-1,k-1);
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false); precalc();
    int n,L,R;
    cin >> n >> L >> R;
    vi f(n+1);
    int m = 0;
    for(int i = 1; i<=n; i++){
        int x;
        cin >> x;
        m = max(m,x);
        f[x]++;
    }
    vector<vector<vi>>dp(n+1,vector<vi>(n+1,vi(n+1)));
    dp[m][1][1] = 1;
    int cur = f[m];
    for(int i = m-1; i>=1; i--){
        rep(j,0,n) rep(k,0,n) rep(l,0,2) rep(r,0,2){
            if(l + r > f[i])continue;
            int items = f[i] - l - r;
            int buckets = cur - 1 + l + r;
            dp[i][j+l][k+r] += dp[i+1][j][k] * starsbars(items,buckets) % mod;
            dp[i][j+l][k+r] %= mod;
        }
        cur += f[i];
    }
    cout << dp[1][L][R] << '\n';
    return 0;
}

Submission Info

Submission Time
Task I - Update Positions
User kevinyang
Language C++23 (GCC 15.2.0)
Score 4
Code Size 1901 Byte
Status AC
Exec Time 1010 ms
Memory 544824 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 4 / 4
Status
AC × 2
AC × 6
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 28 ms 34588 KiB
00_sample_01.txt AC 28 ms 34552 KiB
01_random_00.txt AC 985 ms 544632 KiB
01_random_01.txt AC 1008 ms 544744 KiB
01_random_02.txt AC 1010 ms 544824 KiB
01_random_03.txt AC 239 ms 544692 KiB