以下是代码,思路就是把每个位置要乘多少算出来然后把俩个答案分别算出来然后一减。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 500005
#define mod 1000000007
ll a[N],b[N],c[N],k,p,q;
int main ()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin>>k>>p;
for(int i=1;i<=p;i++)
{
cin>>a[i];
}
cin>>q;
for(int i=1;i<=p;i++)
{
if(i>p-q)
{
cin>>b[i];
}
}
for(int i=1;i<=p;i++)
{
c[i]=max(2ll,max(a[i],b[i])+1);
}
c[p+1]=1;
for(int i=p;i>=1;i--)
{
c[i]*=c[i+1];
c[i]%=mod;
}
ll res1=0,res2=0;
for(int i=1;i<=p;i++)
{
res1+=a[i]*c[i+1];
res1%=mod;
}
for(int i=1;i<=p;i++)
{
res2+=b[i]*c[i+1];
res2%=mod;
}
cout<<(res1-res2+mod)%mod;
return 0;
}