結果
問題 | No.2229 Treasure Searching Rod (Hard) |
ユーザー |
|
提出日時 | 2023-02-24 22:10:30 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 215 ms / 2,000 ms |
コード長 | 3,067 bytes |
コンパイル時間 | 703 ms |
コンパイル使用メモリ | 68,456 KB |
最終ジャッジ日時 | 2025-02-10 21:14:14 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#include <iostream>using namespace std;template <int MOD>struct static_modint{using mint = static_modint;public:int val;static_modint() : val(0) {}static_modint(long long v){if (std::abs(v) >= mod()){v %= mod();}if (v < 0){v += mod();}val = v;}mint &operator++(){val++;if (val == mod()){val = 0;}return *this;}mint &operator--(){if (val == 0){val = mod();}val--;return *this;}mint &operator+=(const mint &x){val += x.val;if (val >= mod()){val -= mod();}return *this;}mint &operator-=(const mint &x){val -= x.val;if (val < 0){val += mod();}return *this;}mint &operator*=(const mint &x){val = (int)((long long)val * x.val % mod());return *this;}mint &operator/=(const mint &x){*this *= x.inv();return *this;}mint operator-(){return mint() - *this;}mint pow(long long n) const{mint x = 1, r = *this;while (n){if (n & 1){x *= r;}r *= r;n >>= 1;}return x;}mint inv() const{return pow(mod() - 2);}friend mint operator+(const mint &x, const mint &y){return mint(x) += y;}friend mint operator-(const mint &x, const mint &y){return mint(x) -= y;}friend mint operator*(const mint &x, const mint &y){return mint(x) *= y;}friend mint operator/(const mint &x, const mint &y){return mint(x) /= y;}friend bool operator==(const mint &x, const mint &y){return x.val == y.val;}friend bool operator!=(const mint &x, const mint &y){return x.val != y.val;}friend std::ostream &operator<<(std::ostream &os, const mint &x){return os << x.val;}friend std::istream &operator>>(std::istream &is, mint &x){long long v;is >> v;x = mint(v);return is;}private:static constexpr int mod(){return MOD;}};using mint = static_modint<998244353>;int main(){int h, w, k;cin >> h >> w >> k;mint ans = 0;for (int i = 0; i < k; i++){long long x, y;mint v;cin >> x >> y >> v;for (int c = 0; c < 2; c++){if (y >= x){ans += v * (x * (x + 1) / 2);}else{ans += v * ((x + (x - y + 1)) * y / 2);}y = w + 1 - y;}ans -= v * x;}cout << ans << endl;}