AnAn新学会了进制的概念,但是她学艺不精,把各种进制混淆用在一个数上了,发明了混进制。例如AnAn制造了混进制数123,其中1是2进制,2是4进制,3是10进制。所以混进制数123换算成十进制是63。
现在AnAn使用混进制写出了两个数字,分别是A和B,已知A>B,且A和B是同一种混进制数,并且该混进制中的所有进制中,最高进制不超过n进制,最低进制不低于二进制。求A-B的最小可能值。
输入格式
第一行一个正整数n,最高进制不超过n进制。
第二行一个正整数An,表示混进制数A的位数。
第三行An个用空格分开的整数,表示混进制数A按从高位到低位顺序各个数位上的数字在十进制下的表示。
第四行一个正整数Bn,表示混进制数B的位数。
第五行Bn 个用空格分开的整数,表示混进制数B按从高位到低位顺序各个数位上的数字在十进制下的表示。
输出格式
输出一行一个整数,表示混进制数 A − B 的结果的最小可能值转换为十进制后再模1000000007 的结果。
输入/输出例子1
输入:
11
3
10 4 0
3
1 2 0
输出:
94
样例解释
对于 30% 的数据,N ≤ 10; Ma, Mb ≤ 8. 对于 100% 的数据,2 ≤ N ≤ 1000; 1 ≤An, Bn ≤ 100000; A ≥ B.
代码:
#include<bits/stdc++.h>
using namespace std;
int n,ma,mb,a[100005],b[100005];
const int mod=1e9+7;
int main(){
cin>>n>>ma;
for(int i=ma;i>=1;i--) cin>>a[i];
cin>>mb;
for(int i=mb;i>=1;i--) cin>>b[i];
long long bw=1,ans=0;
for(int i=1;i<=ma;i++){
int now=max(a[i],b[i])+1;
if(now<2) now=2;
ans+=a[i]*bw-b[i]*bw;
ans%=mod;
bw=bw*now%mod;
}
cout<<ans<<endl;
return 0;
}