B
原题地址
https://codeforces.com/contest/2061/problem/B
分析
排序整个数组。构成一个等腰梯形需要满足以下条件:
1. 循环一次寻找相同的两个数,构成一对等腰
2. 三条边之和大于第四条边,这样保证可以构成一个梯形,而不是一条线段。
代码
#include <bits/stdc++.h>
using namespace std;
#define akitama return 0
#define ll long long
#define vl vector<ll>
/*
bool check(ll a, ll b,ll c,ll d) {
if(a == b||a == c||a == d||b == c||b == d||c == d) return true;else return false;
}
*/
void solve() {
int num;cin >> num;
vl v(num);
for(int i = 0;i < num;++ i) {
cin >> v[i];
}
sort(v.begin(), v.end());
study(v);
ll tar_idx = -1;
for(int i = 1;i < num;++ i) {
if(v[i] == v[i - 1]) {
tar_idx = i;
}
} if(tar_idx == -1) {
cout << "-1" << endl;
return;
}
ll tar = v[tar_idx];
v.erase(v.begin() + tar_idx);
v.erase(v.begin() + tar_idx - 1);
for(int i = 1;i < v.size();++ i) {
if(v[i] < v[i - 1] + tar * 2) {
cout << tar << " " << tar << " " << v[i] << " " << v[i - 1] << endl;
return;
}
}
cout << "-1" << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;cin >> t;
while(t --) {
solve();
}
akitama;
}
评论(已关闭)
评论已关闭