#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define ff first
#define ss second
#define pb push_back
const int mod=1e9+7;
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;
cin>>n;
bool sb2=1;
vector <int> h(n),w(n);
for(int i=0;i<n;i++){
cin>>h[i];
if(h[i]>2)sb2=0;
}
for(int i=0;i<n;i++){
cin>>w[i];
}
int x=0;
for(int i=0;i<n;i++){
x+=w[i];
}
int y=x+1;
int ans=0;
if(sb2){
if(x%2==0)x/=2;
else y/=2;
ans+=((x%mod)*(y%mod))%mod;
ans%=mod;
x=0;
for(int i=0;i<n;i++){
if(h[i]==2){
x+=w[i];
}
else{
y=x+1;
ans+=((x%mod)*(y%mod))%mod;
ans%=mod;
x=0;
}
}
if(x!=0){
y=x+1;
ans+=((x%mod)*(y%mod))%mod;
ans%=mod;
}
cout<<ans%mod<<"\n";
return 0;
}
bool sm=1;
for(int i=0;i<n;i++){
if(h[i]!=h[0])sm=0;
}
if(sm){
if(x%2==0)x/=2;
else y/=2;
int z=((x%mod)*(y%mod))%mod;
int a=h[0];
int b=h[0]+1;
if(a%2==0)a/=2;
else b/=2;
int c=((a%mod)*(b%mod))%mod;
ans=(z*c)%mod;
cout<<ans<<"\n";
return 0;
}
for(int i=0;i<n;i++){
int a=h[i];
int b=h[i]+1;
if(a%2==0)a/=2;
else b/=2;
int c=((a%mod)*(b%mod))%mod;
//cout<<c<<" ";
if(x%2==0)x/=2;
else y/=2;
int z=((x%mod)*(y%mod))%mod;
int q=x-w[i];
int r=q+1;
if(q%2==0)q/=2;
else r/=2;
int t=((q%mod)*(r%mod))%mod;
int d=(z+mod-t)%mod;
//cout<<d<<"\n";
d=(d*c)%mod;
ans+=d;
ans%=mod;
x-=w[i];
y=x+1;
}
cout<<ans<<"\n";
}
/*
10^14*(10^14+1)/2
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |