lanqiao 2108 X 进制减法
This commit is contained in:
34
13lanqiao/test5.cpp
Normal file
34
13lanqiao/test5.cpp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// 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); // 计算每一位的进制
|
||||||
|
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
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user