20分求助
查看原帖
20分求助
1271781
zhangchenyi_awa楼主2024/6/3 21:13

为什么从第三个数据点开始就没过

#include <bits/stdc++.h>
using namespace std;
int n,m;
int col[1000010],num[1000010];
int a1[1000010][2],a2[1000010][2],a3[1000010][2],a4[1000010][2];
const int v=10007;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&num[i]);
	for(int i=1;i<=n;i++) scanf("%d",&col[i]);
	memset(a1,0,sizeof(a1));
	memset(a2,0,sizeof(a2));
	memset(a3,0,sizeof(a3));
	memset(a4,0,sizeof(a4));
	long long ans=0;
	for(int i=1;i<=n;i++){
		int y=i%2;
		ans+=a1[col[i]][y];ans%=v;
		ans+=a2[col[i]][y]*num[i];ans%=v;
		ans+=a3[col[i]][y]*i;ans%=v;
		ans+=a4[col[i]][y]*i%v*num[i]%v;ans%=v;
		a1[col[i]][y]+=1LL*i*num[i]%v;a1[col[i]][y]%=v;
		a2[col[i]][y]+=i;a2[col[i]][y]%=v;
		a3[col[i]][y]+=num[i];a2[col[i]][y]%=v;
		++a4[col[i]][y];a4[col[i]][y]%=v;
	}
	printf("%lld",ans);
	return 0;
}
2024/6/3 21:13
加载中...