关于式子的差异(玄关)
查看原帖
关于式子的差异(玄关)
1026012
fsp_luogu楼主2025/1/15 20:52

code:

#include<iostream>

using namespace std;

const int mod = 10007;
const int N = 1e5 + 10; 

int n,m;
int number[N],color[N];
int s1[N][2],s2[N][2];
//s1[i][x]:颜色是i,是奇/偶(1/0) 的元素数量
//s2[i][x]:颜色是i,是奇/偶(1/0) 的元素number之和 
int ans; 

int main(){
	
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++){
		scanf("%d", &number[i]);
	}
	for(int i = 1; i <= n; i++){
		scanf("%d", &color[i]);
		s1[color[i]][i % 2]++;
		//数量增加
		s2[color[i]][i % 2] = ( s2[color[i]][i % 2] + number[i] ) % mod;
		//数字和增加 
	}
	
	for(int i = 1; i <= n; i++){
		int c = color[i];
		
//		ans += i * (( s2[c][i % 2] - number[i] ) % mod + ((number[i] % mod) * (( s1[c][i % 2] - 1 ) % mod ) % mod ) ) % mod;
		
		ans += i * (s2[c][i % 2] + number[i] * ( s1[c][i % 2] - 2 ) % mod) % mod;
		
		ans %= mod;
	}
	
	printf("%d", ans);
	
	return 0;
}

1:

		ans += i * (( s2[c][i % 2] - number[i] ) % mod + ((number[i] % mod) * (( s1[c][i % 2] - 1 ) % mod ) % mod ) ) % mod;

2:

		ans += i * (s2[c][i % 2] + number[i] * ( s1[c][i % 2] - 2 ) % mod) % mod;

为什么1式子会产生负数,而2式子是正确的?

2025/1/15 20:52
加载中...