题目链接:
思路:
X进制数321怎么转换为十进制数为65?如下图:

①题目要求我们求 A - B 的最小值,对第 i 位,要求 A[i] - B[i] 的最小值,当进制越小的时候差值越小,但进制要比 max(A[i], B[i])大。题目有要求,最低为二进制,因此:进制 = max(max(A[i], B[i]), 2);
②由于数据比较大,所以我们进行一次计算,就取模 (1000000007)。
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=100010, MOD = 1000000007;int n;
//存数字 A 、B
int a[N], b[N];
//答案
int ans;signed main(){cin >> n;int m1; cin >> m1;//将 A 位数字每一位逆序存入到数组a中for(int i = m1-1; i >= 0; i--) cin >> a[i];//将 B 位数字每一位逆序存入到数组b中int m2; cin >> m2;for(int i = m2-1; i>=0; i--) cin >>b[i];//开始的进位为1int d = 1;//从数字的各位枚举到A,B数字中的最高位for(int i = 0; i < max(m1, m2); i++){//这一位差*前面进制ans += (a[i]-b[i]) * d;//取模,防止数据过大ans %= MOD;//更新最小的进制 最低为二进制int w = max(max(a[i], b[i])+(long long)1, (long long)2) % MOD;//更新最小的进制d *= w;//取模,防止数据过大d %= MOD;}cout << ans%MOD << endl;return 0;
}