結果
| 問題 |
No.2229 Treasure Searching Rod (Hard)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-02-28 08:38:33 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 62 ms / 2,000 ms |
| コード長 | 2,908 bytes |
| コンパイル時間 | 4,062 ms |
| コンパイル使用メモリ | 229,828 KB |
| 実行使用メモリ | 6,528 KB |
| 最終ジャッジ日時 | 2024-09-15 11:46:56 |
| 合計ジャッジ時間 | 8,624 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
// url https://yukicoder.me/problems/no/2229
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=b-1;i>=a;i--)
#define all(x) (x).begin(),(x).end()
#define pb(x) push_back(x);
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a = b; return 1; } return 0; }
typedef long long ll;
typedef long double lld;
using namespace std;
using namespace atcoder;
using mint = static_modint<998244353>;
// using mint = static_modint<1000000007>;
const ll mod=998244353;
//const ll mod=1e9+7;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
const string zton="0123456789";
const string atoz="abcdefghijklmnopqrstuvwxyz";
const string ATOZ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const ll inf=(1ll<<60);
// const int inf=(1<<30);
lld dist(lld x1,lld x2,lld y1,lld y2){
lld res=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
res=sqrt(abs(res));
return res;
}
lld arg(lld x,lld y){
const lld eps=1e-8;
lld res=0;
if(abs(x)+abs(y)<=eps)return 0.0;
else if(abs(x)<=eps){
if(y>=0.0)return (M_PI/2);
else return (M_PI/2+M_PI);
}
else if(abs(y)<=eps){
if(x>=0.0)return 0.0;
else return M_PI;
}
res=atan2(abs(y),abs(x));
if(x<=0&&y>=0)res=(M_PI-res);
else if(x<=0&&y<=0)res+=(M_PI);
else if(x>=0&&y<=0)res=(M_PI*2-res);
return res;
}
ll gcd(ll a,ll b){
if(a==0||b==0)return a+b;
ll r;
r=a%b;
if(r==0){
return b;
}
else{
return gcd(b,r);
}
}
typedef pair<ll,int> P;
int main(void){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int H,W,K;cin >> H >> W >> K;
vector<int> x(K),y(K);
vector<ll> v(K);
rep(i,0,K){
cin >> x[i] >> y[i] >> v[i];
x[i]--;y[i]--;
x[i]=H-1-x[i];
// y[i]=W-1-y[i];
}
mint ans=0;
rep(k,0,K){
ll tmp=0;
int l=x[k]+y[k];
int r=W-1+x[k]-y[k];
// cout << k << " " << l << " " << r << endl;
if(l>=H-1&&r>=H-1){
ll n=H-x[k];
ll a1=1;
ll an=n*2-1;
tmp=(a1+an)*n/2;
}
else{
ll n1=H-x[k];
ll a1=1;
ll an=n1*2-1;
tmp+=(a1+an)*n1/2;
ll n2=H-l-1;
ll b2=(n2*(n2+1)/2);
ll n3=H-r-1;
ll b3=(n3*(n3+1)/2);
if(n2>=0){
tmp-=b2;
}
if(n3>=0){
tmp-=b3;
}
// cout << n1 << " " << n2 << " " << n3 << endl;
}
ans+=v[k]*tmp;
// cout << tmp << endl;
}
cout << ans.val() << endl;
// rep(i,0,H){
// rep(j,0,W){
// int l=i+j;
// int r=W-1+i-j;
// cout << i << " " << j << " " << l << " " << r << endl;
// }
// }
}