B 卷积
找规律一题。
规律如图
代码
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <iomanip> #include <limits.h> #include <sstream> #include <cctype> #include <numeric> #include <vector> #include <queue> #include <deque> #include <stack> #include <map> #include <unordered_map> #include <unordered_set> #include <set> //#pragma GCC optimize(2) //#pragma GCC optimize(3, "Ofast", "inlin") using namespace std; #define ios ios::sync_with_stdio(false) , cin.tie(0) #define x first #define y second typedef long long LL; typedef unsigned long long ULL; typedef pair<int, int> PII; const int N = 100010, INF = 0x3f3f3f3f, mod = 998244353, base = 131; const double eps = 1e-6, PI = acos(-1); int n; LL a[N], b[N], c[N]; LL md(LL n) { return (n + mod) % mod; } void work() { cin >> n; for (int i = 0; i < n; i ++ ) scanf("%lld", &a[i]); for (int i = 0; i < n; i ++ ) scanf("%lld", &b[i]); LL suma = 0; for (int i = 1; i < n; i ++ ) { suma = md(suma + a[i]); } // cout << suma << endl; LL sumb = 0; for (int j = 1; j < n; j ++ ) { sumb = md(sumb + b[j] * suma); } // cout << sumb << endl; c[0] = sumb; // cout << c[0] << endl; suma = md(a[0] * b[0]); for (int i = 2; i < n; i ++ ) suma = md(suma + a[0] * b[i]); for (int j = 2; j < n; j ++ ) suma = md(suma + b[0] * a[j]); c[1] = suma; c[2] = md(md(a[1] * b[0]) + md(a[0] * b[1])); for (int i = 0; i < n; i ++ ) cout << c[i] << ' '; cout << endl; } int main() { //ios; int T = 1; // cin >> T; while (T -- ) { work(); } return 0; }