三角形个数

题目描述

有一个包含 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

输出格式

一个整数。

输入:

-2 -3 -5

输出:

0

输入:

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;	
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值