请问这两段代码的结果为什么不一样呢?(内含AC代码)
查看原帖
请问这两段代码的结果为什么不一样呢?(内含AC代码)
839170
Etsuya233楼主2023/7/25 15:53

检查过了,好像取余也没有什么问题。。

错误代码,只拿了80分,思路是一边算一边求差值。但是我注意到把ans和hexa的类型改为int会只拿30分。
#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。输出时再相减。
#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;
}
2023/7/25 15:53
加载中...