結果
問題 |
No.2994 べき内積
|
ユーザー |
|
提出日時 | 2024-12-25 11:13:46 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 211 ms / 2,000 ms |
コード長 | 758 bytes |
コンパイル時間 | 632 ms |
コンパイル使用メモリ | 75,032 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-25 11:13:51 |
合計ジャッジ時間 | 3,565 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
#include<iostream> #include<vector> #include<cassert> #include<atcoder/modint> using namespace std; const int p=1009; using mint=atcoder::static_modint<p>; int M,N; int K[4<<17]; mint A[2000]; vector<mint>conv(vector<mint>a,vector<mint>b) { vector<mint>ret(N+1); for(int i=0;i<=N;i++)for(int j=0;j<=i;j++)ret[i]+=a[j]*b[i-j]; return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>M>>N; for(int i=0;i<=M;i++)cin>>K[i]; int sum=0; for(int i=2;i<=M;i++)sum+=K[i]; for(int i=0;i<=N;i++) { int a;cin>>a; A[i]=a; } vector<mint>a(N+1); a[0]=A[0].pow(sum); vector<mint>b(A,A+N+1); int t=K[0]+K[1]*p; while(t) { if(t&1)a=conv(a,b); t>>=1; b=conv(b,b); } for(int i=0;i<=N;i++)cout<<a[i].val()<<(i==N?"\n":" "); }