题意:
给定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;
}