注意,一定不要给 (A[i] - B[i]) * w 取模,因为它可能是负数!!!
这个错误我检查了俩小时,呜呜呜呜呜呜呜
除此之外这题只要思路对了,难度是比较小的
题目
思路:1.反向输入,因为权重和题目顺序是相反的
2.B数组的大小要和A一样,因为A长度比较大,或者二者一样长
3.B初始化值为0,因为缺少的部分要填0,用于后面的相减
4.每一位的进制数就是max({2 , A[i], B[i]})
5.每位的权值是前面所有位数进制的积
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
typedef long long ll;
int main()
{
int N, Ma, Mb;
ll ans = 0, w = 1;
cin >> N >> Ma;
vector < int > A(Ma);
for (int i = Ma - 1; i >= 0; i--)
cin >> A[i];
cin >> Mb;
vector < int > B(Ma, 0);
for (int i = Mb - 1; i >= 0; i--)
cin >> B[i];
vector < ll > W(Ma);
for (int i = 0; i < Ma; i++) {
W[i] = max({ 2, A[i] + 1, B[i] + 1 });
if(i != 0)
w = (w * W[i - 1]) % MOD;
ans =(ans + (A[i] - B[i]) * w) % MOD;
}
cout << ans;
return 0;
}
标签:Ma,进制,Mb,int,ll,cin,蓝桥,ans,减法
From: https://blog.csdn.net/2401_82949509/article/details/136846365