結果
問題 | No.2378 Cards and Subsequences |
ユーザー |
|
提出日時 | 2023-07-07 22:02:53 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 403 ms / 2,000 ms |
コード長 | 929 bytes |
コンパイル時間 | 889 ms |
コンパイル使用メモリ | 73,216 KB |
実行使用メモリ | 18,944 KB |
最終ジャッジ日時 | 2024-07-21 18:04:22 |
合計ジャッジ時間 | 9,626 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 35 |
ソースコード
#include<iostream>#include<vector>#include<cassert>#include<atcoder/modint>#include<atcoder/fenwicktree>using namespace std;using mint=atcoder::modint998244353;int N,M,K;int S[2000],A[2000],B[2000];atcoder::fenwick_tree<mint>dp[2001];int prv[2000];int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cin>>N>>M>>K;for(int i=0;i<N;i++)cin>>S[i],S[i]--;for(int i=0;i<M;i++)cin>>A[i];for(int i=0;i<M;i++)cin>>B[i];for(int i=0;i<=K;i++){dp[i]=atcoder::fenwick_tree<mint>(N);}for(int i=0;i<M;i++){prv[i]=-1;}for(int i=0;i<N;i++){int a=A[S[i]],b=B[S[i]];for(int j=0;j+a<=K||j+b<=K;j++){mint now=0;if(prv[S[i]]==-1){now=j==0;now+=dp[j].sum(0,i);}else{now=dp[j].sum(prv[S[i]],i);}if(j+a<=K){dp[j+a].add(i,now);}if(j+b<=K){dp[j+b].add(i,now);}}prv[S[i]]=i;}cout<<dp[K].sum(0,N).val()<<endl;}