题目:
思路:
开始没看懂题目
后来明白了
比如例子中的321,就是(3*10+2)*2+1=65
要使得A-B最小,那就是选用的进制也最小
比如110-10,,,,在2进制下得4,在十进制下得100
代码:
#include<iostream>
using namespace std;
const long long mod=1000000007;
int n,ma,mb;
int b[100010];
int a[100010];
int c[100010];
long long A,B;
int main(){
cin>>n;
cin>>ma;
for(int i=1;i<=ma;i++){
cin>>a[i];
}
cin>>mb;
for(int i=1;i<=mb;i++){
cin>>b[i];
}
for(int i=1;i<=ma/2;i++){
swap(a[i],a[ma-i+1]);
}
for(int i=1;i<=mb/2;i++){
swap(b[i],b[mb-i+1]);
}
for(int i=1;i<=max(ma,mb);i++){
c[i]=max(max(a[i],b[i])+1,2);
}
for(int i=ma;i>0;i--){
A=(A*c[i]+a[i])%mod;
}
for(int i=mb;i>0;i--){
B=(B*c[i]+b[i])%mod;
}
cout<<(A-B+mod)%mod;
return 0;
}