题目如下:
我一开始想通过sort直接比较,但直接Wa了,这是为什么呢?
看下面这个例子:
3 8 12 15 16 16 3 15 16一组 8 12 16一组
所以:不可以通过sort去比较更小的三个和更大的三个!!!
那我们应该怎么办呢???
跑暴力是无疑的,比如dfs!!!
但STL库里面有全排列函数,如果我们可以枚举所有分配情况,如果能找到可以拼成两个三角形的情况,那我们就输出Yes;反之,如果所有情况都不能拼成两个三角形,那我们就输出No。
AC代码如下:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define ll long long
using namespace std;
int s[10];
int main()
{
int a,b,c,d,e,f;
int t;
cin>>t;
while(t--)
{
bool flag = 0;
for(int i = 0;i<6;i++)
{
scanf("%d",&s[i]);
}
sort(s,s+6);
do
{
a = s[0],b = s[1],c = s[2];
d = s[3],e = s[4],f = s[5];
if(a+b>c&&a+c>b&&b+c>a
&&d+e>f&&d+f>e&&e+f>d)
{
flag = 1;
break;
}
}while(next_permutation(s,s+6));
if(flag)
printf("Yes\n");
else
printf("No\n");
}
}
最后,感谢您的阅读!!!