結果

問題 No.2215 Slide Subset Sum
ユーザー SSRS
提出日時 2023-02-10 22:08:49
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 1,720 bytes
コンパイル時間 2,984 ms
コンパイル使用メモリ 223,992 KB
実行使用メモリ 175,364 KB
最終ジャッジ日時 2024-07-07 16:23:06
合計ジャッジ時間 11,217 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 2
other AC * 2 TLE * 1 -- * 42
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
#include <atcoder/convolution>
using namespace std;
const long long MOD = 998244353;
template <typename T>
struct sliding_window_aggregation{
function<T(T, T)> f;
T E;
stack<pair<T, T>> fr, bk;
sliding_window_aggregation(function<T(T, T)> f, T E): f(f), E(E){
}
void push(T x){
if (fr.empty()){
fr.push(make_pair(x, x));
} else {
fr.push(make_pair(x, f(fr.top().second, x)));
}
}
void pop(){
if (bk.empty()){
while (!fr.empty()){
T x = fr.top().first;
fr.pop();
if (bk.empty()){
bk.push(make_pair(x, x));
} else {
bk.push(make_pair(x, f(x, bk.top().second)));
}
}
}
bk.pop();
}
T get(){
T ans1 = E;
if (!fr.empty()){
ans1 = fr.top().second;
}
T ans2 = E;
if (!bk.empty()){
ans2 = bk.top().second;
}
return f(ans2, ans1);
}
};
int main(){
int N, M, K;
cin >> N >> M >> K;
vector<int> A(N);
for (int i = 0; i < N; i++){
cin >> A[i];
}
vector<vector<long long>> B(N, vector<long long>(K, 0));
for (int i = 0; i < N; i++){
B[i][0]++;
B[i][A[i]]++;
}
auto op = [&](vector<long long> A, vector<long long> B){
vector<long long> C = atcoder::convolution(A, B);
for (int i = K; i < K * 2 - 1; i++){
C[i - K] += C[i];
C[i - K] %= MOD;
}
C.resize(K);
return C;
};
vector<long long> E(K, 0);
E[0] = 1;
sliding_window_aggregation<vector<long long>> S(op, E);
for (int i = 0; i < M; i++){
S.push(B[i]);
}
for (int i = 0; i <= N - M; i++){
cout << (S.get()[0] + MOD - 1) % MOD << endl;
if (i < N - M){
S.pop();
S.push(B[i + M]);
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0