boxmoe_header_banner_img

でも夢はきらめない。

文章导读

Codeforce Round 999(Div.1 + Div.2) B.Kevin and Geometry


avatar
akitama 2025年1月31日 115

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;
}


描述文字



评论(已关闭)

评论已关闭