题意:给定n个数,问是否存在一个数,使得这个数与该数列的任意2个组成一个非退化的三角形(即三角形面积不为0)。
分析:用三角不等式 |a-b| < c < a+b .先对数列排序,按升序排列,则符合的数的最小上界为a[0]+a[1],最大下界为a[n-1]-a[0].
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAX_N 200005
using namespace std;
bool comp(const int a,const int b)
{
return a<b;
}
int main(void)
{
int n,a[MAX_N];
while(scanf("%d",&n)==1)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,comp);
int lb=a[n-1]-a[0];
int ub=a[0]+a[1];
if(lb+1<ub)
{
printf("YES\n");
printf("%d\n",lb+1);
}
else
printf("NO\n");
}
return 0;
}