// lanqiao 2108 X 进制减法 #include 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 */