結果
問題 | No.2994 べき内積 |
ユーザー |
|
提出日時 | 2024-12-25 11:12:56 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 66 ms / 2,000 ms |
コード長 | 914 bytes |
コンパイル時間 | 2,289 ms |
コンパイル使用メモリ | 107,632 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-12-25 11:13:01 |
合計ジャッジ時間 | 4,082 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
#include<iostream> #include<vector> #include<cassert> #include<atcoder/modint> #include<atcoder/convolution> 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<long long>L(N+1),R(N+1); for(int i=0;i<=N;i++)L[i]=a[i].val(); for(int i=0;i<=N;i++)R[i]=b[i].val(); auto M=atcoder::convolution_ll(L,R); vector<mint>ret(N+1); for(int i=0;i<=N;i++)ret[i]=mint(M[i]); 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":" "); }