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;
}

京公网安备 11010502036488号