社区讨论
请问这两段代码的结果为什么不一样呢?(内含AC代码)
P8782[蓝桥杯 2022 省 B] X 进制减法参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo23gx1s
- 此快照首次捕获于
- 2023/10/23 07:23 2 年前
- 此快照最后确认于
- 2023/11/03 07:43 2 年前
检查过了,好像取余也没有什么问题。。
错误代码,只拿了80分,思路是一边算一边求差值。但是我注意到把ans和hexa的类型改为int会只拿30分。
CPP#include <iostream>
#include <algorithm>
using namespace std;
int n, ma, mb;
int a[100005] = {0}, b[100005] = {0};
int res[100005] = {0};
int moda = 1000000007;
int maxDigit = 0;
long long ans = 0;
long long hexa = 1;
int main(){
fill(res, res + 100005, 2);
cin >> n;
cin >> ma;
for(int i = ma; i >= 1; i--){
cin >> a[i];
res[i] = max(res[i], a[i] + 1);
}
cin >> mb;
for(int i = mb; i >= 1; i--){
cin >> b[i];
res[i] = max(res[i], b[i] + 1);
}
maxDigit = max(ma, mb);
for(int i = 1; i <= maxDigit; i++){
ans = (ans + ((a[i] - b[i]) * hexa) % moda) % moda;
hexa = (hexa * res[i]) % moda;
}
cout << ans;
return 0;
}
AC代码:思路分别求出A,B。输出时再相减。
CPP#include <iostream>
#include <algorithm>
using namespace std;
int n, ma, mb;
int a[100005] = {0}, b[100005] = {0};
int res[100005] = {0};
int moda = 1000000007;
int maxDigit = 0;
long long hexa = 1;
int main(){
fill(res, res + 100005, 2);
cin >> n;
cin >> ma;
for(int i = ma; i >= 1; i--){
cin >> a[i];
res[i] = max(res[i], a[i] + 1);
}
cin >> mb;
for(int i = mb; i >= 1; i--){
cin >> b[i];
res[i] = max(res[i], b[i] + 1);
}
maxDigit = max(ma, mb);
int numa = 0, numb = 0;
for(int i = 1; i <= maxDigit; i++){
if(i <= ma) numa = (numa + a[i] * hexa) % moda;
if(i <= mb) numb = (numb + b[i] * hexa) % moda;
hexa = (hexa * res[i]) % moda;
}
cout << (numa - numb + moda) % moda;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...