結果
問題 |
No.1552 Simple Dice Game
|
ユーザー |
|
提出日時 | 2021-06-18 22:20:25 |
言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 772 ms / 2,500 ms |
コード長 | 1,553 bytes |
コンパイル時間 | 3,756 ms |
コンパイル使用メモリ | 161,560 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-22 20:46:25 |
合計ジャッジ時間 | 13,526 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 20 |
ソースコード
#include <bits/stdc++.h> using namespace std; const int64_t mod = 998'244'353; int64_t mpow(int64_t b, int64_t e) { int64_t r = 1; while (e) { if (e & 1) { r *= b; r %= mod; } b *= b; b %= mod; e >>= 1; } return r; } inline int64_t minv(int64_t b) { return mpow(b, mod - 2); } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int64_t n; int m; cin >> n >> m; int64_t f = 0; for (int i = 0; i < m; ++i) { int64_t sum_max_upper = (n % mod) * (i + 2); sum_max_upper %= mod; sum_max_upper *= minv(2); sum_max_upper %= mod; sum_max_upper *= mpow(i + 1, n); sum_max_upper %= mod; int64_t sum_max_lower = (n % mod) * (i + 1); sum_max_lower %= mod; sum_max_lower *= minv(2); sum_max_lower %= mod; sum_max_lower *= mpow(i, n); sum_max_lower %= mod; int64_t sum_min_upper = (n % mod) * (m + i + 2); sum_min_upper %= mod; sum_min_upper *= minv(2); sum_min_upper %= mod; sum_min_upper *= mpow(m - i - 1, n); sum_min_upper %= mod; int64_t sum_min_lower = (n % mod) * (m + i + 1); sum_min_lower %= mod; sum_min_lower *= minv(2); sum_min_lower %= mod; sum_min_lower *= mpow(m - i, n); sum_min_lower %= mod; int64_t sum_max = sum_max_upper - sum_max_lower; sum_max %= mod; int64_t sum_min = sum_min_lower - sum_min_upper; sum_min %= mod; f += sum_max * (i + 1); f %= mod; f -= sum_min * (i + 1); f %= mod; } f = (f + mod) % mod; cout << f << "\n"; return 0; }