zoukankan      html  css  js  c++  java
  • Repair 暴力

    Description

    standard input/output
    Statements

    Alex is repairing his country house. He has a rectangular metal sheet of size a × b. He has to cut two rectangular sheets of sizes a1 × b1and a2 × b2 from it. All cuts must be parallel to the sides of the initial sheet. Determine if he can do it.

    Input

    The first line contains two space-separated integers a and b (1 ≤ a, b ≤ 109) — the sizes of the initial sheet.

    The second line contains two space-separated integers a1 and b1 (1 ≤ a1, b1 ≤ 109) — the sizes of the first sheet to cut out.

    The third line contains two space-separated integers a2 and b2 (1 ≤ a2, b2 ≤ 109) — the sizes of the second sheet to cut out.

    Output

    Output «YES» (without quotes), if it's possible to cut two described sheets from the initial sheet, or «NO» (without quotes), if it's not possible.

    Sample Input

    Input
    12 20
    14 7
    5 6
    Output
    YES
    Input
    12 20
    11 9
    20 7
    Output
    NO


    枚举那两个小长方形的形状,要么躺着,要么倒着,
    然后位置关系也有2中,上下或者左右。一共8种情况
    枚举有技巧,不用全部写if。考怒写循环。
    固定1,枚举2的两种形状,枚举2的位置关系。
    固定2,枚举1的两种形状,枚举1的位置关系。
    这样做的话,没法做到同时转换1和转换2.
    那么考虑转换大长方形再来一次,就能考怒完全部。
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    struct data {
        int row, col;
    } a[5];
    bool check(int torow, int tocol) {
        if (torow <= a[1].row && tocol <= a[1].col) return true;
        else return false;
    }
    void work() {
        for (int i = 1; i <= 3; ++i) {
            cin >> a[i].row >> a[i].col;
        }
        bool flag = false;
        for (int i = 1; i <= 2 && !flag; ++i) {
            if (check(max(a[2].row, a[3].row), a[2].col + a[3].col)) {
                flag = true;
            }
            if (check(a[2].row + a[3].row, max(a[2].col, a[3].col))) {
                flag = true;
            }
            swap(a[3].row, a[3].col);
        }
    //    cout << a[3].row << " " << a[3].col << endl;
        for (int i = 1; i <= 2 && !flag; ++i) {
            if (check(max(a[2].row, a[3].row), a[2].col + a[3].col)) {
                flag = true;
            }
            if (check(a[3].row + a[2].row, max(a[2].col, a[3].col))) {
                flag = true;
            }
            swap(a[2].row, a[2].col);
        }
        swap(a[1].row, a[1].col);
        for (int i = 1; i <= 2 && !flag; ++i) {
            if (check(max(a[2].row, a[3].row), a[2].col + a[3].col)) {
                flag = true;
            }
            if (check(a[2].row + a[3].row, max(a[2].col, a[3].col))) {
                flag = true;
            }
            swap(a[3].row, a[3].col);
        }
    //    cout << a[3].row << " " << a[3].col << endl;
        for (int i = 1; i <= 2 && !flag; ++i) {
            if (check(max(a[2].row, a[3].row), a[2].col + a[3].col)) {
                flag = true;
            }
            if (check(a[3].row + a[2].row, max(a[2].col, a[3].col))) {
                flag = true;
            }
            swap(a[2].row, a[2].col);
        }
    
        if (flag) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
        work();
        return 0;
    }
    View Code
     
  • 相关阅读:
    Bootstrap3入门
    Pi
    比Redis更快:Berkeley DB面面观
    搞定KMP匹配算法
    elasticsearch文档-analysis
    21本计算机数学相关的免费电子书
    [Android开发常见问题-12] Android开发中debug.keystore如何使用。
    (Java实现) 组合的输出
    (Java实现) 自然数的拆分
    (Java实现) 自然数的拆分
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/5864315.html
Copyright © 2011-2022 走看看