3 条题解
-
1
// 11 5 2 // 0*1 + 4*2 + 10*5*2 = 108 // 1 2 0 // 11 5 2 // 0*1 + 2*2 + 1*5*2 = 14 //可以观察到对于每一位数字 当前位置的权重是之前的所有数位的权重之积 //我们只需最小化这个积 显然对于每一位只需取max(a[i], b[i]) + 1 //简单来说就是尽可能的最小化每一位的进制 #include<iostream> #include<algorithm> using namespace std; int n, m1, m2; const int N = 1e5 + 10, mod = 1e9 + 7; int a[N], b[N]; int main() { cin>>n; cin>>m1; for(int i = m1 - 1; i >= 0; i --) cin>>a[i]; cin>>m2; for(int i = m2 - 1; i >= 0; i --) cin>>b[i]; int m = max(m1, m2);//因为A和B的位数不一定相同 int res = 0; for(int i = m - 1; i >= 0; i --) res = (res * (long long)max({2, a[i] + 1, b[i] + 1}) + a[i] - b[i]) % mod; cout<<res<<endl; }
信息
- ID
- 970
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 167
- 已通过
- 28
- 上传者