社区讨论

请问这两段代码的结果为什么不一样呢?(内含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 条回复,欢迎继续交流。

正在加载回复...