Files
lanqiao/13lanqiao/test5.cpp

34 lines
1.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
*/