写三个循环或者dfs枚举六选三判断即可。为了方便,我直接用的stl全排列枚举,这样就不用写三个循环或者dfs了,虽然时间复杂度会升至O(n!),但是n仅为6比较小,对于此题完全可以解决。每次枚举到的时候,我们不妨取前三个是一个“三角形”,后三个是一个“三角形”,看这两“三角形”是否合法即可。总的时间复杂度为O(6! * T)。
#include <iostream>
#include <vector>
#include <algorithm>
void solve(){
std::vector<int> a(6);
for(int i = 0; i < 6; i++){
std::cin >> a[i];
}
std::sort(a.begin(), a.end());
do{
std::vector<int> b(a.begin(), a.begin() + 3);
std::vector<int> c(a.begin() + 3, a.end());
std::sort(b.begin(), b.end());
std::sort(c.begin(), c.end());
if(b[0] + b[1] > b[2] && c[0] + c[1] > c[2]){
std::cout << "Yes\n";
return;
}
}while(std::next_permutation(a.begin(), a.end()));
std::cout << "No\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int T = 1;
std::cin >> T;
for(int i = 0; i < T; i++){
solve();
}
return 0;
}

京公网安备 11010502036488号