3层for循环开o2,照样能AC(doge
查看原帖
3层for循环开o2,照样能AC(doge
517320
CyaNgw_DyG楼主2021/12/12 00:21
#include<bits/stdc++.h>
using namespace std;
struct doge{long long n,v,c;}f[1000002];
bool cmp(doge q,doge p){if(q.c==p.c){return q.n%2<(p.n%2);}else return q.c<p.c;}
long long n,m,ans,k[1000002],mm,tot=1;
int main(){
	cin>>n>>m;
	mm=m;
	for(int i=1;i<=n;i++)cin>>f[i].v;
	for(int i=1;i<=n;i++){
		cin>>f[i].c;
		f[i].n=i;
	}
	sort(f+1,f+1+n,cmp);
	for(int now=1,cnt=0,i=1;i<=n+1&&mm>0;i++){
		if(now!=f[i].c){
			k[tot++]=cnt;
			cnt=1;
			now=f[i].c;
			mm--;
		}else cnt++;
	}
	int sum=0;
	for(int i=1;i<=m;i++){
		for(int j=sum+1;j<=k[i]+sum;j++){
			for(int l=j+1;l<=sum+k[i];l++){
				if((f[j].n+f[l].n)%2!=0) break;
				if((f[j].n+f[l].n)%2==0&&j!=l){
					ans=(ans+((f[j].n+f[l].n)%10007)*((f[j].v+f[l].v)%10007))%10007;
				}
			}
		}
		sum+=k[i];
	}cout<<ans%10007;
}
2021/12/12 00:21
加载中...