結果
問題 | No.1299 Random Array Score |
ユーザー |
![]() |
提出日時 | 2020-12-04 19:32:18 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 103 ms / 2,000 ms |
コード長 | 1,942 bytes |
コンパイル時間 | 2,166 ms |
コンパイル使用メモリ | 191,936 KB |
最終ジャッジ日時 | 2025-01-16 15:59:59 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
#include <bits/stdc++.h>using namespace std;using fint64 = int_fast64_t;template<fint64 MOD>struct ModInt {fint64 x;ModInt():x(0){}ModInt(fint64 x):x(x>=0?x%MOD:(MOD-(-x)%MOD)%MOD){}// 負号ModInt operator -() const{return ModInt(-x);}// 加算ModInt &operator +=(const ModInt &rhs){x+=rhs.x;if(x>=MOD) x-=MOD;return (*this);}ModInt operator +(const ModInt &rhs) const{return ModInt(*this)+=rhs;}// 減算ModInt &operator -=(const ModInt &rhs){x+=MOD-rhs.x;if(x>=MOD) x-=MOD;return (*this);}ModInt operator -(const ModInt &rhs) const{return ModInt(*this)-=rhs;}// 乗算ModInt &operator *=(const ModInt &rhs){x*=rhs.x;if(x>=MOD) x%=MOD;return (*this);}ModInt operator *(const ModInt &rhs) const{return ModInt(*this)*=rhs;}// 除算ModInt &operator /=(const ModInt &rhs){(*this)*=rhs.inverse();return (*this);}ModInt operator /(const ModInt &rhs) const{return ModInt(*this)/=rhs;}// 等号bool operator ==(const ModInt &rhs){return x==rhs.x;}bool operator !=(const ModInt &rhs){return x!=rhs.x;}// 累乗ModInt pow(fint64 n) const{fint64 tmp=x;fint64 ret=1;while(n>0){if(n&1) ret=ret*tmp%MOD;tmp=tmp*tmp%MOD;n>>=1ll;}return ModInt(ret);}// 逆元ModInt inverse() const{fint64 a=x,b=MOD,s=1,t=0;while(b>0){fint64 u=a/b;a-=u*b;s-=u*t;swap(a,b);swap(s,t);}return ModInt(s);}// 入出力friend istream &operator >>(istream &lhs,ModInt<MOD> &rhs){fint64 x; lhs>>x;rhs=ModInt<MOD>(x);return lhs;}friend ostream &operator <<(ostream &lhs,const ModInt<MOD> &rhs){return lhs<<rhs.x;}};constexpr int MOD = 998244353;using mint = ModInt<MOD>;int main() {int n; cin >> n;int64_t k; cin >> k;mint sum = 0;for(int i = 0; i < n; ++i) {mint a; cin >> a;sum += a;}cout << sum * ((mint)2).pow(k) << '\n';return 0;}