結果
| 問題 | 
                            No.2048 L(I+D)S
                             | 
                    
| コンテスト | |
| ユーザー | 
                             RedstoneGamer22
                         | 
                    
| 提出日時 | 2023-01-17 08:59:43 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 18 ms / 2,000 ms | 
| コード長 | 921 bytes | 
| コンパイル時間 | 1,699 ms | 
| コンパイル使用メモリ | 192,844 KB | 
| 最終ジャッジ日時 | 2025-02-10 04:02:12 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 16 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5 + 7;
const int mod = 998244353;
int fact[NMAX];
int lgpow(int b, int e) {
    int ret = 1;
    while(e) {
        if(e & 1) ret = (1LL * ret * b) % mod;
        b = (1LL * b * b) % mod;
        e /= 2;
    }
    return ret;
}
int main() {
    fact[0] = 1;
    for(int i = 1; i < NMAX; i++) fact[i] = (1LL * fact[i - 1] * i) % mod;
    int n; cin >> n;
    int ans = 0;
    for(int k = 2; k <= n - 2; k++) {
        int upper = fact[n];
        int lower = 1;
        lower = (1LL * lower * (n - 1)) % mod;
        lower = (1LL * lower * fact[k - 2]) % mod;
        lower = (1LL * lower * fact[n - k - 2]) % mod;
        lower = (1LL * lower * k) % mod;
        lower = (1LL * lower * (n - k)) % mod;
        int cnt = (1LL * upper * lgpow(lower, mod - 2)) % mod;
        ans = (1LL * ans + 1LL * cnt * cnt) % mod;
    }
    cout << ans << endl;
}
            
            
            
        
            
RedstoneGamer22