題目鏈接:
思路:
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;
}