結果
問題 | No.1989 Pairing Multiset |
ユーザー |
|
提出日時 | 2022-06-25 11:12:33 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 490 ms / 2,000 ms |
コード長 | 3,002 bytes |
コンパイル時間 | 1,086 ms |
コンパイル使用メモリ | 96,476 KB |
最終ジャッジ日時 | 2025-01-30 00:46:37 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 |
ソースコード
#include <algorithm>#include <cmath>#include <iostream>#include <map>#include <numeric>#include <queue>#include <set>#include <vector>using namespace std;using ll = long long;#define rep(i, j, n) for (ll i = j; i < (n); ++i)#define rrep(i, j, n) for (ll i = (n)-1; j <= i; --i)#define all(a) a.begin(), a.end()template <typename T>std::ostream &operator<<(std::ostream &os, std::vector<T> &a) {for (size_t i = 0; i < a.size(); ++i) os << (i > 0 ? " " : "") << a[i];return os << '\n';}template <typename T>std::istream &operator>>(std::istream &is, std::vector<T> &a) {for (T &x : a) { is >> x; }return is;}[[maybe_unused]] constexpr long long MOD = 998244353;// constexpr long long MOD = 1000000007;[[maybe_unused]] constexpr int INF = 0x3f3f3f3f;[[maybe_unused]] constexpr long long INFL = 0x3f3f3f3f3f3f3f3fLL;template <long long mod = 1000000007>class modint {public:long long x;constexpr modint(const long long x = 0) noexcept : x(x % mod) {}constexpr long long &value() noexcept { return x; }constexpr const long long &value() const noexcept { return x; }constexpr modint operator+(const modint rhs) const noexcept {return modint(*this) += rhs;}constexpr modint operator-(const modint rhs) const noexcept {return modint(*this) -= rhs;}constexpr modint operator*(const modint rhs) const noexcept {return modint(*this) *= rhs;}constexpr modint operator/(const modint rhs) const noexcept {return modint(*this) /= rhs;}constexpr modint &operator+=(const modint rhs) noexcept {if ((x += rhs.x) >= mod) x -= mod;return *this;}constexpr modint &operator-=(const modint rhs) noexcept {if ((x += mod - rhs.x) >= mod) x -= mod;return *this;}constexpr modint &operator*=(const modint rhs) noexcept {x = x * rhs.x % mod;return *this;}constexpr modint &operator/=(const modint rhs) noexcept {*this *= rhs.inverse();return *this;}constexpr bool operator==(const modint &rhs) const { return x == rhs.x; }constexpr bool operator!=(const modint &rhs) const { return x != rhs.x; }modint inverse() const {long long a = x, b = mod, u = 1, v = 0, t;while (b > 0) {t = a / b;swap(a -= t * b, b);swap(u -= t * v, v);}return modint(u + mod);}modint pow(long long exp) const {modint res(1), mul(x);while (exp > 0) {if (exp & 1) res *= mul;mul *= mul;exp >>= 1;}return res;}operator long long() const { return x; }friend ostream &operator<<(ostream &os, const modint &rhs) {return os << rhs.x;}friend istream &operator>>(istream &is, modint &a) {long long t;is >> t;a = modint<mod>(t);return is;}};int main() {cin.tie(0)->sync_with_stdio(0);using mint = modint<MOD>;ll n, m;cin >> n >> m;mint ans = 1;rep(i, 0, n * 2 + 1) ans *= mint(n * 2 + m - i) * mint(i + 1).inverse();cout << ans * mint(n);}