题目大意:给定
n(n≤106)
根木棍,每根木棍有一个长度,求是否存在三根颜色不同的木棍能构成一个面积为正的三角形
枚举最长的那根木棍,由于能够成三角形的充要条件是两短边和大于第三边,因此短边越长越好
因此维护
[1,i]
集合中最长的三根颜色不同的木棍即可
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 1001001
using namespace std;
int k,n,top;
pair<int,int> stack[M],a[3];
int main()
{
int i,j;
cin>>k;
for(i=1;i<=k;i++)
{
scanf("%d",&n);
for(j=1;j<=n;j++)
{
stack[++top]=pair<int,int>(0,i);
scanf("%d",&stack[top].first);
}
}
sort(stack+1,stack+top+1);
for(i=1;i<=top;i++)
{
for(j=0;j<3;j++)
if(stack[i].second==a[j].second)
{
a[j]=stack[i];
break;
}
if(j==3) a[0]=stack[i];
sort(a,a+3);
if(a[0].second)
{
if(a[0].first+a[1].first>a[2].first)
{
printf("%d %d %d %d %d %d\n",a[0].second,a[0].first,a[1].second,a[1].first,a[2].second,a[2].first);
return 0;
}
}
}
puts("NIE");
return 0;
}