結果
| 問題 |
No.2137 Stairs of Permutation
|
| コンテスト | |
| ユーザー |
pockyny
|
| 提出日時 | 2023-10-07 18:39:08 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 581 ms / 2,000 ms |
| コード長 | 1,172 bytes |
| コンパイル時間 | 621 ms |
| コンパイル使用メモリ | 71,612 KB |
| 最終ジャッジ日時 | 2025-02-17 06:10:45 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 23 |
ソースコード
#include <iostream>
#include <atcoder/modint>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
using ll = long long;
const int MX = 10000010;
mint f[MX],inv[MX],fi[MX];
constexpr ll mod = 998244353;
void solve(){
inv[1] = 1;
for(int i=2;i<MX;i++){
inv[i] = mod - (mod/i)*inv[mod%i];
}
f[0] = fi[0] = 1;
for(int i=1;i<MX;i++){
f[i] = f[i-1]*i;
fi[i] = fi[i-1]*inv[i];
}
}
mint nck(ll n, ll k){
if(n<0 || k<0 || n<k) return 0;
return f[n]*fi[k]*fi[n-k];
}
mint sum1[MX],sum2[MX];
int main(){
int i,n; cin >> n;
solve();
mint ans1 = 0,ans2 = 0,ans3 = 0;
sum1[0] = 0; sum2[n] = inv[n];
for(i=1;i<=n;i++) sum1[i] = sum1[i - 1] + inv[i];
for(i=n - 1;i>=0;i--) sum2[i] = sum2[i + 1] + inv[i];
for(i=1;i<=n;i++) ans1 += inv[i];
for(i=1;i<=n;i++) ans2 += sum1[i - 1]*inv[i];
for(i=1;i<=n;i++) ans3 += sum1[i - 1]*inv[i]*sum2[i + 1];
mint m = (mint)n;
// cout << (ans1*f[n]).val() << endl;
// cout << (ans2*f[n]).val() << endl;
// cout << (ans3*f[n]).val() << endl;
mint ans = (ans1 + ans2*6 + ans3*6)*f[n];
cout << ans.val() << "\n";
}
pockyny