結果
| 問題 |
No.2272 多項式乗算 mod 258280327
|
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2023-04-14 22:06:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,680 bytes |
| コンパイル時間 | 4,638 ms |
| コンパイル使用メモリ | 263,332 KB |
| 最終ジャッジ日時 | 2025-02-12 06:45:29 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 WA * 8 |
ソースコード
#include <stdio.h>
#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using mint = modint;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 4000000000000000001
template <class T>
vector<T> convolution_mint(vector<T> a,vector<T> b){
static constexpr unsigned long long M0 = 998244353;
static constexpr unsigned long long M1 = 754974721;
static constexpr unsigned long long M2 = 469762049;
vector<long long> aa(a.size()),bb(b.size());
rep(i,a.size())aa[i] = a[i].val();
rep(i,b.size())bb[i] = b[i].val();
auto c0 = convolution<M0>(aa,bb);
auto c1 = convolution<M1>(aa,bb);
auto c2 = convolution<M2>(aa,bb);
vector<mint> ret(c0.size());
rep(i,c0.size()){
ret[i] += c0[i];
{
long long cur = c0[i];
cur %= M1;
cur = c1[i]-cur;
if(cur<0)cur += M1;
cur *= 416537774;
cur %= M1;
mint m = M0;
ret[i] += m*cur;
cur *= M0;
cur += c0[i];
cur %= M2;
cur = c2[i] - cur;
if(cur<0)cur += M2;
cur *= 429847628;
cur %= M2;
m *= M1;
ret[i] += m * cur;
}
}
return ret;
}
int main(){
mint::set_mod(258280327);
int N,M;
cin>>N;
vector<mint> a(N+1);
rep(i,N+1){
long long t;
cin>>t;
a[i] = t;
}
cin>>M;
vector<mint> b(M+1);
rep(i,M+1){
long long t;
cin>>t;
b[i] = t;
}
a = convolution_mint(a,b);
while(a.size()>0 && a.back()==0)a.pop_back();
cout<<(int)a.size()-1<<endl;
rep(i,a.size()){
if(i!=0)cout<<' ';
cout<<a[i].val();
}
cout<<endl;
/*
long long N,E;
cin>>N>>E;
if(N>=0){
long long sq = sqrtl(N);
if(sq*sq==N){
cout<<sq<<endl;
return 0;
}
}
*/
return 0;
}
沙耶花