2022蓝桥杯 试题E X 进制减法


【问题描述】 进制规定了数字在数位上逢几进一。 X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某 种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 321 转换为十进制数为 65。 现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确 定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进 制。请你算出 A ? B 的结果最小可能是多少。 请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数 字要小于其进制。 【输入格式】 第一行一个正整数 N,含义如题面所述。 第二行一个正整数 Ma,表示 X 进制数 A 的位数。 第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各 个数位上的数字在十进制下的表示。 第四行一个正整数 Mb,表示 X 进制数 B 的位数。 第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各 个数位上的数字在十进制下的表示。 请注意,输入中的所有数字都是十进制的。 【输出格式】 输出一行一个整数,表示 X 进制数 A ? B 的结果的最小可能值转换为十进 制后再模 1000000007 的结果。 【样例输入】 11 3 10 4 0 3 1 2 0 【样例输出】 94 【样例说明】 当进制为:最低位 2 进制,第二数位 5 进制,第三数位 11 进制时,减法 得到的差最小。此时 A 在十进制下是 108,B 在十进制下是 14,差值是 94。 【评测用例规模与约定】 对于 30% 的数据,N ≤ 10; Ma, Mb ≤ 8. 对于 100% 的数据,2 ≤ N ≤ 1000; 1 ≤ Ma, Mb ≤ 100000; A ≥ B. //------------------------------------------------------------------------------------------------------------

#include
using namespace std;
int n;
int ma;
int a[100000];
int mb;
int b[100000];
int c[100000];
int jin[100000];
int main(){
cin>>n;
cin>>ma;
for(int i=ma;i>=1;i--){
cin>>a[i];
}
cin>>mb;
for(int i=mb;i>=1;i--){
cin>>b[i];
}
jin[0]=1;
for(int i=1;i<=max(ma,mb);i++){
c[i]=a[i]-b[i];
if(c[i]>=0){
if(a[i]<=2&&b[i]<=2){
jin[i]=2;
}
else{
jin[i]=max(a[i],b[i])+1;
}
}
else{
jin[i]=n;
}
}


int sum=0;
for(int i=1;i<=max(ma,mb);i++){
int s=1;
for(int k=0;k s*=jin[k];
}
sum+=c[i]*s;
}
cout< return 0;