题目描述
有一个包含 N 个元素的数组 L[1..N]。 选择数组的 3 个不同下标: i,j,k, 满足 i<j<k, 就构成下标对(i,j,k)。
如果下标对( i,j,k) 满足以下所有条件, 那么该下标对就是“ 优质对” :
1、 令 A = L[i] + L[j]
2、 令 B = L[j] + L[k]
3、 令 C = L[k] + L[i]
4、 如果 A、 B、 C 都是非负数, 而且以 A、 B、 C 作为三条边, 能构成三角形。
你的任务是: 给出 L 数组[1..N], 可以有多少个不同的“ 优质对” ?
输入格式
第一行, 一个整数 N。 1 <= N <= 200000。
接下来有 N 行, 第 i 行是一个整数 L[i]。 -1000000000<=L[i]<=1000000000
输出格式
一个整数。
输入:
3
-2 -3 -5
输出:
0
输入:
4
1 4 6 -45
输出:
1
代码
#include <bits/stdc++.h>
using namespace std;
int n,x;
long long ans;
int main()
{
cin>>n;
for (int i=0;i<n;i++)
{
cin>>x;
if (x>0) ans++;
}
cout<<ans*(ans-1)*(ans-2)/6;
return 0;
}