2021-04-10

牛客练习赛80

比赛地址:https://ac.nowcoder.com/acm/contest/11170/B

题目大意:
在这里插入图片描述
给出数列a和b按照公式求出c序列即可,说一下mex,比如s是一个集合,那么mexs的值就等于集合s中未出现的最小自然数。

思路:当mex{j,k}=i中的i等于0的时候显然j和k可以取任意的大于0的自然数,那么c0=(a1+a2+…+an-1)(b1+b2+…+bn-1)
当mex{j,k}=i中i等于1的时候,则aj或bk中必须有一个的下标为0,简单分析一下可以得出c1=a0
(b2+b3+…+bn-1)+b0*(a2+a3+…+an-1)+a0b0
当i>=2的时候ci=a0
b1+a1*b0

看代码:

#include <iostream>
typedef long long ll;
const int mod=998244353;
using namespace std;
int a[300005],b[300005];
int main()
{
    int n;
    cin>>n;
    ll x=0,y=0,z=0,suma=0,sumb=0;
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
    }
    for(int i=0; i<n; i++)
    {
        cin>>b[i];
    }
    for(int i=1;i<n;i++)
    {
        suma=(suma+a[i])%mod;
        sumb=(sumb+b[i])%mod;
    }
    x=1ll*suma*sumb%mod;
    y=(1ll*(suma-a[1])*b[0]+1ll*(sumb-b[1])*a[0]+1ll*a[0]*b[0])%mod;
    y=(y+mod)%mod;
    z=(1ll*a[0]*b[1]+1ll*a[1]*b[0])%mod;
    cout<<x%mod<<' '<<y%mod<<' '<<z%mod<<' ';
    for(int i=3; i<n; i++)
    {
        cout<<0;
        if(i!=n-1)
            cout<<' ';
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值