Pair of Topics-------------------------------思维

在这里插入图片描述
在这里插入图片描述
题意:
给定a数组和b数组 问ai+aj>bi+bj (i<j) 有多少组

解析:
移项: ai-bi>bj-aj
设 ai-bi=ci 那么 bj-aj=-(aj-bj)=-cj

所以只要求 ci>-cj 即 ci+cj>0

计算出c数组,排序,遍历就行了


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+1000;
int a[N],b[N],c[N];
int n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++) scanf("%d",&b[i]);
	for(int i=1;i<=n;i++) c[i]=a[i]-b[i];
	sort(c+1,c+1+n);
	int l=1,r=n;
	ll ans=0;
	while(l<r)
	{
		if(c[l]+c[r]>0) 
		{
		//	cout<<l<<"  "<<r<<endl;
			ans=ans+(r-l);
		//	cout<<(r-l)<<endl;
			r--;
		}
		else l++;
	}
	cout<<ans<<endl;
}
发布了491 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43690454/article/details/104858465