题意:给出n条线段,求是否存在可以组成三角形的三条边
解:保证两边之和大于第三边即可,排序后遍历整个数组,只需看最接近的三条线段即可,如果最接近的三条线段都不成立,那么其他必定不成立。即若a[i] + a[i + 1] <= a[i + 2], 从i + 2继续向上走不等式依旧成立且无法形成三角形。反之亦然。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main()
{
int n;
bool flag = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a, a + n);
for(int i = 0; i < n - 2; i++)
if(a[i] + a[i + 1] > a[i + 2])
flag = 1;
if(flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}