返回题解分享
讨论 / 题解分享/ 帖子详情

飞机降落(编程题) - 题解

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;

int T[N], D[N], L[N];

bool check(const int n, int* arr) {
    bool ist = false;
    int begin = 0;
    for (int i = 0; i < n; i ++) {
        auto idx = arr[i];
        if (i == 0) begin = T[idx] + L[idx];
        else if (T[idx] >= begin){
            begin = T[idx] + L[idx];
        } else if (T[idx] < begin && T[idx] + D[idx] >= begin) {
            begin += L[idx];
        } else {
            return false;
        }
    }
    return true;
}

void solve() {
    int n; cin >> n;
    for (int i = 0; i < n; i ++) {
        cin >> T[i] >> D[i] >> L[i];
    }
    int arr[n];
    for (int i = 0; i < n; i ++) {
        arr[i] = i;
    }   
    do {
        if (check(n, arr)) {
            puts("YES");
            goto outSide;
        }
    } while (next_permutation(arr, arr + n));
    puts("NO");
    outSide:
}

int main(void) {    
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int t; cin >> t;

    for (int i = 0; i < t; i ++) {
        solve();
    }
    return 0;
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!