結果
問題 | 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;}