結果
| 問題 |
No.3328 岩井ツリーグラフ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-01 16:15:17 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 123 ms / 2,000 ms |
| コード長 | 1,117 bytes |
| コンパイル時間 | 707 ms |
| コンパイル使用メモリ | 78,608 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-11-01 16:15:21 |
| 合計ジャッジ時間 | 3,584 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
ll modpow(ll a, ll b, ll p){
a%=p;
ll ans=1;
while(b>0){
if(b%2==1) ans=(ans*a)%p;
b/=2;
a=(a*a)%p;
}
return ans;
}
int main(void){
ll x; cin >> x;
vector<ll> y(x);
ll sum=1, sum2=0, ans=0, mod=998244353, rev=499122177, six=modpow(6, mod-2, mod), ad=0;
auto f=[&](ll st, ll d, ll num){
ll last=st+d*(num-1)%mod; last%=mod;
return num*(st+last)%mod*rev%mod;
};
auto g=[&](ll num){
return num*(num-1)%mod*(num+1)%mod*six%mod;
};
for(auto&p:y) cin >> p, sum+=p, sum2+=p*(p+3)%mod*rev%mod, sum2%=mod, sum%=mod;
for(int i=0; i<x; i++){
ll base=1+sum2-(y[i]*(y[i]+3)%mod*rev%mod); base=(base+mod)%mod;
ll d=sum-y[i];
//cout << i << ' ' << y[i] << ' ' << base << ' ' << d << ' ' << f(base, d, y[i]) << ' ' << y[i]*(y[i]-1)%mod*rev%mod << endl;
ans+=f(base, d, y[i]); ans%=mod;
ll ad=g(y[i]); ad%=mod;
ans+=ad; ans%=mod;
sum=(sum-y[i]+mod)%mod;
sum2-=y[i]*(y[i]+3)%mod*rev%mod; sum2=(sum2+mod)%mod;
}
cout << ans << endl;
return 0;
}