CodeForces - 1166C
思路:
最后保证X和Y在|X+Y|和|X-Y|的中间
全部都是绝对值,是正数
保证X<Y,得到Y-X<X<Y<X+Y,只需要判定Y-X<X的条件,即Y<2*X
由于要保证不超时,所以选择用二分法查找Y
(由于之前我没用二分而是暴力枚举的所以一直超时)
(后来从网上看的大佬的思路)
#include<bits/stdc++.h>
#include<algorithm>
#define ll long long
const ll nl=2e5+1;
ll inf=99999999;
using namespace std;
ll num[nl];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>num[i];
num[i]=fabs(num[i]);
}
sort(num+1,num+n+1);
int left=1,right=1;
ll sum=0;
while(right<=n)
{
if(num[right]-num[left]<=num[left])
{
sum+=right-left;
right++;
}
else
{
left++;
}
}
cout<<sum<<endl;
return 0;
}