結果
問題 | No.1697 Deque House |
ユーザー |
![]() |
提出日時 | 2021-10-01 23:24:12 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 44 ms / 3,500 ms |
コード長 | 1,441 bytes |
コンパイル時間 | 1,043 ms |
コンパイル使用メモリ | 98,260 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-19 16:14:40 |
合計ジャッジ時間 | 2,310 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
#include <iostream>#include <vector>using namespace std;#define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i<i##_end_;i++)#define IFOR(i, begin, end) for(int i=(end)-1,i##_begin_=(begin);i>=i##_begin_;i--)#define REP(i, n) FOR(i,0,n)#define IREP(i, n) IFOR(i,0,n)#include <atcoder/modint>using mint = atcoder::modint998244353;int main() {cin.tie(nullptr), ios::sync_with_stdio(false);int N, K;cin >> N >> K;vector<int> A(N);for (auto &x : A) cin >> x;vector<mint> pow2(K * 2 + 10, 1);FOR(i, 1, pow2.size()) pow2[i] = pow2[i - 1] * 2;vector dpn(3, vector<mint>(K + 1));vector dpsum(3, vector<mint>(K + 1));dpn[0][0] = pow2[K * 2].inv();vector<mint> ap(K + 1, 1);REP(i, N) {FOR(k, 1, K + 1) ap[k] = ap[k - 1] * A[i];REP(k, K) {dpsum[0][k + 1] += dpsum[0][k];dpn[0][k + 1] += dpn[0][k];}IREP(k, K) {dpsum[2][k] += dpsum[2][k + 1];dpn[2][k] += dpn[2][k + 1];}REP(d, 3) REP(k, K + 1) {dpsum[d][k] = (dpsum[d][k] + dpn[d][k] * ap[k]) * pow2[k];dpn[d][k] *= pow2[k];}IREP(d, 2) {dpsum[d + 1][K] += dpsum[d][K];dpn[d + 1][K] += dpn[d][K];dpsum[d][K] = dpn[d][K] = 0;}}cout << accumulate(dpsum.back().begin(), dpsum.back().end(), mint(0)).val() << '\n';}