34 lines
1.1 KiB
C++
34 lines
1.1 KiB
C++
// lanqiao 2108 X 进制减法
|
||
#include<bits/stdc++.h>
|
||
using namespace std;
|
||
#define int long long
|
||
const int N = 1e5+10, MOD = 1e9+7;
|
||
int a[N], b[N];
|
||
/*
|
||
解法: 通过观察可得,每一位的进制=max(max(a[i],b[i])+1,2)
|
||
同时为了保证个位对齐,所以需要将a,b数组逆序存储
|
||
*/
|
||
signed main(){
|
||
int mx, m, n; // mx-最高进制位, A的进制位m, B的进制位n
|
||
cin >> mx >> m;
|
||
for(int i = m; i >= 1; i--) cin >> a[i];
|
||
cin >> n;
|
||
for(int i = n; i >= 1; i--) cin >> b[i];
|
||
int ans = 0; // 存储A-B的结果
|
||
int w = 1; // W存储每一位的权重
|
||
int t; // 存储每一位的进制
|
||
for(int i = 1; i <= max(m,n); i++){
|
||
t = max(max(a[i], b[i]) + (int)1, (int)2); // 计算每一位的进制(取两数中最低进制), 正常情况下不会高于mx, 所以这里不对mx取小
|
||
ans = (ans + (a[i] - b[i]) * w) % MOD; // 计算当前位置减法后转化为十进制的结果
|
||
w = (w*t) % MOD; // 计算每一位的权重
|
||
}
|
||
cout << ans % MOD << endl;
|
||
return 0;
|
||
}
|
||
/* test samples -> 94
|
||
11
|
||
3
|
||
10 4 0
|
||
3
|
||
1 2 0
|
||
*/ |