結果
問題 | No.2229 Treasure Searching Rod (Hard) |
ユーザー |
![]() |
提出日時 | 2023-02-24 22:42:58 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 52 ms / 2,000 ms |
コード長 | 4,348 bytes |
コンパイル時間 | 1,592 ms |
コンパイル使用メモリ | 193,976 KB |
最終ジャッジ日時 | 2025-02-10 21:54:49 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#include<bits/stdc++.h>using namespace std;#define ll long long#define ull unsigned long long#define db double#define pii pair<int,int>#define pll pair<ll,ll>#define ti3 tuple<int,int,int>#define int128 __int128_t#define pii128 pair<int128,int128>const int inf = 1 << 30;const ll linf = 1e18;const ll mod = 998244353;const db EPS = 1e-10;const db pi = acos(-1);template<class T> bool chmin(T& x, T y){if(x > y) {x = y;return true;} else return false;}template<class T> bool chmax(T& x, T y){if(x < y) {x = y;return true;} else return false;}// overload macro#define CAT( A, B ) A ## B#define SELECT( NAME, NUM ) CAT( NAME, NUM )#define GET_COUNT( _1, _2, _3, _4, _5, _6 /* ad nauseam */, COUNT, ... ) COUNT#define VA_SIZE( ... ) GET_COUNT( __VA_ARGS__, 6, 5, 4, 3, 2, 1 )#define VA_SELECT( NAME, ... ) SELECT( NAME, VA_SIZE(__VA_ARGS__) )(__VA_ARGS__)// rep(overload)#define rep( ... ) VA_SELECT(rep, __VA_ARGS__)#define rep2(i, n) for (decay_t<decltype(n)> i = 0; i < n; i++)#define rep3(i, a, b) for (decay_t<decltype(a)> i = a; i < b; i++)#define rep4(i, a, b, c) for (decay_t<decltype(a)> i = a; i < b; i += c)// rrep(overload)#define rrep( ... ) VA_SELECT(rrep, __VA_ARGS__)#define rrep2(i, n) for (decay_t<decltype(n)> i = n - 1; i >= 0; i--)#define rrep3(i, a, b) for (decay_t<decltype(a)> i = b - 1; i >= a; i--)#define rrep4(i, a, b, c) for (decay_t<decltype(a)> i = b - 1; i >= a; i -= c)// for_earh#define fore(e, v) for (auto&& e : v)// vector#define all(v) v.begin(), v.end()#define rall(v) v.rbegin(), v.rend()template<long long mod>struct modint{long long num;constexpr modint(long long x = 0) : num((x + mod) % mod) {}constexpr modint &operator += (const modint& rhs){num = (num + rhs.num) % mod;return *this;}constexpr modint &operator -= (const modint& rhs){num -= rhs.num;while(num < 0) num += mod;num %= mod;return *this;}constexpr modint &operator *= (const modint& rhs){num = num * rhs.num % mod;return *this;}constexpr modint &operator /= (modint rhs){int exp = mod - 2;while(exp > 0){if(exp % 2){*this *= rhs;}rhs *= rhs;exp /= 2;}return *this;}constexpr modint operator ++ (){num = (num + 1) % mod;return *this;}constexpr modint operator ++ (int n){(void)n;modint tmp = *this;++(*this);return tmp;}constexpr modint operator -- (){num = (num + mod - 1) % mod;return *this;}constexpr modint operator -- (int n){(void)n;const modint tmp = *this;--(*this);return tmp;}void modpow(ll y){modint tmp = (*this);(*this) = 1;while(y > 0){if(y % 2){(*this) *= tmp;}tmp *= tmp;y /= 2;}}constexpr modint operator + (const modint& rhs) const {return modint(*this) += rhs;}constexpr modint operator - (const modint& rhs) const {return modint(*this) -= rhs;}constexpr modint operator * (const modint& rhs) const {return modint(*this) *= rhs;}constexpr modint operator / (const modint& rhs) const {return modint(*this) /= rhs;}friend ostream &operator << (ostream& lhs, const modint& rhs){return lhs << rhs.num;}friend istream &operator >> (istream& lhs, modint& rhs){lhs >> rhs.num;return lhs;}};#define mint modint<mod>mint modpow(mint x, ll y){if(y == 0) return 1;mint e = modpow(x, y / 2);e = e * e;return e * (y % 2 == 0 ? 1 : x);}ll calc(ll s, ll h) {ll t = max(0ll, s - h + 1);return (s + t) * (s - t + 1) / 2;}ll H, W, K;int main() {cin.tie(nullptr);ios_base::sync_with_stdio(false);cout << fixed << setprecision(20);cin >> H >> W >> K;mint ans = 0;rep (i, K) {int x, y, v;cin >> x >> y >> v;mint cnt = x * W;ans += (cnt - calc(y - 1, x) - calc(W - y, x)) * v;}cout << ans << "\n";}