为什么40分wa,满分数学思路,所有样例都过了
查看原帖
为什么40分wa,满分数学思路,所有样例都过了
837043
SSTFXJQ楼主2023/10/1 19:51
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
	int yuanb;  //原来的编号 
	int v;
	int col;
}a[100005];
bool cmp(node x,node y){
	if(x.col!=y.col)return x.col<y.col;
	return x.v<y.v;
}
int main(){
//	freopen("sum.in","r",stdin);
//	freopen("sum.out","w",stdout);
	long long ans=0;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i].v;
		a[i].yuanb=i;
	}
	for(int i=1;i<=n;i++)	cin>>a[i].col;
	sort(a+1,a+n+1,cmp);
//	for(int i=1;i<=n;i++){
//		cout<<a[i].yuanb<<" "; 
//	}
//	cout<<endl;
	long long so1=0,so2=0,so3=0,so=0,sj=0,sj1=0,sj2=0,sj3=0;
	for(int i=1;i<=n+1;i++){
		if(a[i].col!=a[i-1].col){
			ans+=so1*so2+so3*(so-2);
			//cout<<a[i-1].col<<" "<<ans<<endl; 
			ans%=10007;
			ans+=sj1*sj2+sj3*(sj-2);
		//	cout<<ans<<endl;
			ans%=10007;
			so1=0,so2=0,so3=0,so=0,sj=0,sj1=0,sj2=0,sj3=0;
		} 
		if(a[i].yuanb%2==0) {   //偶数 
			so1+=a[i].yuanb;    
			so2+=a[i].v;
			so3+=a[i].yuanb*a[i].v;
			so++;
			so1%=10007,so2%=10007,so3%=10007;
		}
		if(a[i].yuanb%2==1){    //奇数 
			sj1+=a[i].yuanb;    
			sj2+=a[i].v;
			sj3+=a[i].yuanb*a[i].v;
			sj++;
			sj1%=10007,sj2%=10007,sj3%=10007;
		} 
	}
	cout<<ans;
	
	return 0;
}
2023/10/1 19:51
加载中...