90分,可否在这基础上优化
查看原帖
90分,可否在这基础上优化
1220004
_moting_楼主2024/5/6 09:48
#include<bits/stdc++.h>
#define ll long long
using namespace std;

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

struct edge{
	ll b;
	ll c;
	ll n;
}a[N];

ll n,m,ans,tot;

inline ll read(){
    ll x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}

void print(ll x){
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        print(x/10);
    putchar(x%10+'0');
    return;
}

bool cmp(edge x,edge y){
	if(x.c==y.c)return x.b<y.b; 
	return x.c<y.c;
}

int main(){
	n=read();
	m=read();
	for(int i=1;i<=n;i++){
		a[i].b=i;
		a[i].n=read();
	}
	for(int i=1;i<=n;i++){
		a[i].c=read();
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n&&a[j].c==a[i].c;j++){
			if((a[j].b-a[i].b)%2==0){
				ans+=(a[i].b+a[j].b)%mod*(a[i].n+a[j].n)%mod;
			}
		}
	} 
	print((ans+mod)%mod);
	return 0;
}
2024/5/6 09:48
加载中...