题目大意:给你每根木棍的长度和颜色,求一个能拼成三角形且木棍颜色互不相同的方案
枚举长度最大的木棍,另外两个木棍就越长越好,因此只需要不断维护前三长且颜色互不相同的木棍就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000010
using namespace std;
struct ppp{int c,l;}b[N];
bool cmp(ppp x,ppp y){return x.l<y.l;}
int fir,firc,sec,secc,thr,thrc;
void update(int C,int L)
{
if(L>fir)
{
if(C==firc)fir=L;
else if(C==secc)
{
sec=fir;secc=firc;
fir=L;firc=C;
}
else
{
thr=sec;thrc=secc;
sec=fir;secc=firc;
fir=L;firc=C;
}
}
else if(L>sec)
{
if(C==firc);
else if(C==secc) sec=L;
else
{
thr=sec;thrc=secc;
sec=L;secc=C;
}
}
else if(L>thr)
{
if(C==firc);
else if(C==secc);
else thr=L,thrc=C;
}
}
int main()
{
int k;
scanf("%d",&k);
int i,j,x,y,cnt=0;
for(i=1;i<=k;i++)
{
scanf("%d",&x);
for(j=1;j<=x;j++)
{
cnt++;
scanf("%d",&b[cnt].l);
b[cnt].c=i;
}
}
sort(b+1,b+cnt+1,cmp);
for(i=1;i<=cnt;i++)
{
update(b[i].c,b[i].l);
if(fir<sec+thr)
{
printf("%d %d %d %d %d %d\n",firc,fir,secc,sec,thrc,thr);
return 0;
}
}
puts("NIE");
}