牛客练习赛80 -- 卷积

卷积

https://ac.nowcoder.com/acm/contest/11170/B

题目链接: https://ac.nowcoder.com/acm/contest/11170/B
思维题:观察可知c数组只需计算前3项,c[3]~c[n - 1]均为0,故只需分析前三项的情况即可
c0 = (sa[n - 1] - sa[0]) * (sb[n - 1] - sb[0]);
c1 = (a[0] * b[0]) + a[0] * (sb[n - 1] - sb[1]) + b[0] * (sa[n - 1] - sa[1]);
c2 = (a[0] * b[1]) + (a[1] * b[0]);
[注]:sa,sb为a,b数组前缀和

代码细节:减法取模操作 -- 化正取模
(arr[n] - arr[1] + MOD) % MOD
推荐代码

#include <bits/stdc++.h>
//#pragma G++ optimize(2)
//#pragma G++ optimize(3,"Ofast","inline")
#define debug freopen("in.txt","r",stdin); freopen("out.txt","w",stdout)
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int MAXN=1e6+100;
const int MOD=998244353 ;
const int INF=0x3f3f3f3f;
const int SUB=-0x3f3f3f3f;
const double eps=1e-4;
const double E=exp(1);
const double pi=acos(-1);
ll arr[MAXN],brr[MAXN],c[MAXN];
int main(){
    ios;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>arr[i];
    for(int i=1;i<=n;i++) cin>>brr[i];
    int c1,c2,c0;
    c2=(arr[1]*brr[2]%MOD+arr[2]*brr[1]%MOD)%MOD;
    for(int i=1;i<=n;i++) arr[i]=(arr[i]+arr[i-1])%MOD;
    for(int i=2;i<=n;i++) brr[i]=(brr[i]+brr[i-1])%MOD;
    c1=((arr[1]*((brr[n]-brr[2]+MOD)%MOD)%MOD+brr[1]*((arr[n]-arr[2]+MOD)%MOD)%MOD)%MOD+(arr[1]*brr[1])%MOD)%MOD;

    c0=(arr[n]-arr[1]+MOD)%MOD*((brr[n]-brr[1]+MOD)%MOD)%MOD;
//     c[1] = (((a[0] * b[0]) % mod + a[0] * (sb[n - 1] - sb[1]) % mod) % mod + b[0] * (sa[n - 1] - sa[1]) % mod) % mod;

    c[0]=c0;
    c[1]=c1;
    c[2]=c2;
    for(int i=0;i<n;i++) cout<<c[i]<<' ';
    return 0;
}

AC代码(不推荐__int128)

#include <bits/stdc++.h>
using namespace std;
#define IO std::ios::sync_with_stdio(false); cin.tie(0)
#define ll long long
#define ull unsigned long long
#define SZ(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rep(i, l, r) for (int i = l; i <= r; ++i)
#define per(i, l, r) for (int i = l; i >= r; --i)
#define mset(s, _) memset(s, _, sizeof(s))
#define mcpy(s, _) memcpy(s, _, sizeof(s))
#define pb push_back
#define pii pair <int, int>
#define vi vector<int>
#define vpii vector<pii> 
#define mp(a, b) make_pair(a, b)
#define debug system("pause")
#define pll pair <ll, ll>
#define fir first
#define sec second
#define inf 0x3f3f3f3f
__int128 read() {
    __int128 x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9') { if(ch=='-') f = -1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x = x * 10 + ch -'0'; ch = getchar(); }
    return x * f;
}
void write(__int128 x) {
    if(x<0) { putchar('-'); x = -x; }
    if(x>9) write(x/10);  putchar(x % 10 + '0');
}

const int N = 1e5 + 10, mod = 998244353;
int n;
ll a[N], b[N];
__int128 sa[N], sb[N];
__int128 c0, c1, c2;
int c[N];

int main() {
    cin >> n;
    rep(i, 0, n - 1) {
        a[i] = read();
        if(i == 0) sa[i] = a[i];
        else sa[i] = (sa[i - 1] + a[i]);
    }    
    rep(i, 0, n - 1) {
        b[i] = read();
        if(i == 0) sb[i] = b[i];
        else sb[i] = (sb[i - 1] + b[i]);
    }
    c0 = (sa[n - 1] - sa[0]) * (sb[n - 1] - sb[0]);
    c1 = (a[0] * b[0]) + a[0] * (sb[n - 1] - sb[1]) + b[0] * (sa[n - 1] - sa[1]);
    c2 = (a[0] * b[1]) + (a[1] * b[0]);
    c0 %= mod; c1 %= mod; c2 %= mod;
    if(n >= 1) {
        write(c0); cout << ' ';
    }
    if(n >= 2)  {
        write(c1); cout << ' '; 
    }
    if(n >= 3) {
        write(c2); cout << ' ';
    }
    rep(i, 3, n - 1) cout << "0 ";
    cout << endl;

    return 0;
}    
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4096次浏览 29人参与
# 你觉得mentor喜欢什么样的实习生 #
10394次浏览 288人参与
# 平安产险科技校招 #
2412次浏览 0人参与
# 帮我看看,领导说这话什么意思? #
6307次浏览 26人参与
# 没有家庭托举的我是怎么找工作的 #
12412次浏览 158人参与
# 怎么给家人解释你的工作? #
1425次浏览 16人参与
# 智慧芽求职进展汇总 #
18000次浏览 106人参与
# 求职低谷期你是怎么度过的 #
5263次浏览 92人参与
# 26届秋招公司红黑榜 #
12326次浏览 43人参与
# 从哪些方向判断这个offer值不值得去? #
6600次浏览 93人参与
# 同bg的你秋招战况如何? #
158823次浏览 927人参与
# 度小满求职进展汇总 #
10109次浏览 51人参与
# 实习必须要去大厂吗? #
146666次浏览 1541人参与
# 校招泡的最久的公司是哪家? #
4576次浏览 22人参与
# 你有哪些缓解焦虑的方法? #
37177次浏览 835人参与
# 面试紧张时你会有什么表现? #
1705次浏览 21人参与
# 你喜欢工作还是上学 #
77583次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85482次浏览 467人参与
# 秋招想进国企该如何准备 #
97710次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103582次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25034次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28126次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务