提出 #75214412


ソースコード 拡げる

#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;

mt19937_64 rng(std::chrono::system_clock::now().time_since_epoch().count());

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);
}
signed main() {
    cin.tie(0)->sync_with_stdio(0); precalc();
    int t;
    cin >> t;
    while(t--){
        int n,c;
        cin >> n >> c;
        vector<int>a(n+2);
        for(int i = 1; i<=n; i++){
            cin >> a[i];
        }
        a[n+1] = c+1;
        sort(all(a));
        vector<vector<vi>>dp(n+1,vector<vi>(n+1,vi(n+1)));
        int ic = inverse(c);
        if(a[1] != 1){
            int p = (a[1] - 1) * ic % mod;
            vector<int>pw(n+1); pw[0] = 1;
            for(int i = 1; i<=n; i++){
                pw[i] = pw[i-1] * p % mod;
            }
            for(int j = 0; j<=n; j++){
                dp[0][0][n-j] = choose(n,j) * pw[j] % mod;
            }
        }
        else{
            dp[0][0][n] = 1;
        }
        for(int i = 1; i<=n; i++){
            int p = fix(a[i+1] - a[i]) * ic % mod;
            vector<int>pw(n+1);
            pw[0] = 1;
            for(int j = 1; j<=n; j++){
                pw[j] = pw[j-1] * p % mod;
            }
            for(int j = 0; j<n; j++){
                for(int k = 0; k<=n; k++){
                    for(int d = 0; d<=k; d++){
                        int pr = pw[d] * choose(k,d) % mod;
                        int nj = max(0ll,j+1 - d);
                        dp[i][nj][k-d] += dp[i-1][j][k] * pr; dp[i][nj][k-d] %= mod;
                    }
                }
            }
        }
        for(int r = n; r>=0; r--){
            cout << dp[n][r][0] << ' ';
        }
        cout << '\n';
    }
    return 0;
}

提出情報

提出日時
問題 C - Greedy Customers 2
ユーザ kevinyang
言語 C++23 (GCC 15.2.0)
得点 700
コード長 2701 Byte
結果 AC
実行時間 262 ms
メモリ 43304 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 1
AC × 27
セット名 テストケース
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_handmade_00.txt, 01_handmade_01.txt, 01_handmade_02.txt, 01_handmade_03.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt, 02_random_14.txt, 02_random_15.txt, 02_random_16.txt, 02_random_17.txt, 02_random_18.txt, 02_random_19.txt, 02_random_20.txt, 02_random_21.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 31 ms 34760 KiB
01_handmade_00.txt AC 260 ms 43200 KiB
01_handmade_01.txt AC 260 ms 43168 KiB
01_handmade_02.txt AC 260 ms 43100 KiB
01_handmade_03.txt AC 30 ms 34852 KiB
02_random_00.txt AC 30 ms 34652 KiB
02_random_01.txt AC 29 ms 34720 KiB
02_random_02.txt AC 260 ms 43200 KiB
02_random_03.txt AC 261 ms 43236 KiB
02_random_04.txt AC 261 ms 43100 KiB
02_random_05.txt AC 260 ms 43076 KiB
02_random_06.txt AC 260 ms 43128 KiB
02_random_07.txt AC 260 ms 43304 KiB
02_random_08.txt AC 261 ms 43100 KiB
02_random_09.txt AC 262 ms 43244 KiB
02_random_10.txt AC 261 ms 43192 KiB
02_random_11.txt AC 260 ms 43236 KiB
02_random_12.txt AC 260 ms 43076 KiB
02_random_13.txt AC 261 ms 43264 KiB
02_random_14.txt AC 260 ms 43300 KiB
02_random_15.txt AC 259 ms 43200 KiB
02_random_16.txt AC 259 ms 43236 KiB
02_random_17.txt AC 260 ms 43140 KiB
02_random_18.txt AC 262 ms 43200 KiB
02_random_19.txt AC 261 ms 43200 KiB
02_random_20.txt AC 260 ms 43200 KiB
02_random_21.txt AC 259 ms 43100 KiB