zoukankan      html  css  js  c++  java
  • CF 1008B Turn the Rectangles(水题+贪心)

    There are n rectangles in a row. You can either turn each rectangle by 90 degrees or leave it as it is. If you turn a rectangle, its width will be height, and its height will be width. Notice that you can turn any number of rectangles, you also can turn all or none of them. You can not change the order of the rectangles.

    Find out if there is a way to make the rectangles go in order of non-ascending height. In other words, after all the turns, a height of every rectangle has to be not greater than the height of the previous rectangle (if it is such).

    Input

    The first line contains a single integer nn (1n105) — the number of rectangles.

    Each of the next nn lines contains two integers wiwi and hihi (1wi,hi109) — the width and the height of the ii-th rectangle.

    Output

    Print "YES" (without quotes) if there is a way to make the rectangles go in order of non-ascending height, otherwise print "NO".

    You can print each letter in any case (upper or lower).

    Examples

    Input
    3
    3 4
    4 6
    3 5
    Output
    YES
    Input
    2
    3 4
    5 5
    Output
    NO

    Note

    In the first test, you can rotate the second and the third rectangles so that the heights will be [4, 4, 3].

    In the second test, there is no way the second rectangle will be not higher than the first one

    题目意思:按顺序给你n个矩形,这些矩形可以旋转90度,也就是长和宽可以转换,问这一些矩形能不能通过旋转实现按照高度非递增排列。

    解题思路:在这道题中,我们对于矩形的高和长没有一个确切的概念,那么就用较长边和较短边来取代,我们需要得到一个按照一边非递增的数序列。我们需要尽可能的扩大数的范围,也就是说尽量用两边中较大的那个作为实现非递增序列的数因子,这样给了下一个矩形更大的发挥空间,如果较大的数超过上一个选择好的,那么只能选择较小的数了,如果较小的也超过了,说明不能实现。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <string>
     6 #define ll long long int
     7 using namespace std;
     8 struct rec
     9 {
    10     ll w;
    11     ll h;
    12     ll maxs;///较长边
    13     ll mins;///较短边
    14 } a[100010];
    15 int main()
    16 {
    17     int n,i,flag;
    18     ll x;
    19     scanf("%d",&n);
    20     for(i=0; i<n; i++)///给矩形的两条边分类
    21     {
    22         scanf("%lld%lld",&a[i].w,&a[i].h);
    23         if(a[i].w>=a[i].h)
    24         {
    25             a[i].maxs=a[i].w;
    26             a[i].mins=a[i].h;
    27         }
    28         else
    29         {
    30             a[i].maxs=a[i].h;
    31             a[i].mins=a[i].w;
    32         }
    33     }
    34     flag=1;
    35     x=a[0].maxs;
    36     for(i=1; i<n; i++)
    37     {
    38        if(a[i].maxs<=x)///更新较长边
    39        {
    40            x=a[i].maxs;
    41        }
    42        else if(a[i].maxs>x&&a[i].mins<=x)///使用较小边
    43        {
    44            x=a[i].mins;
    45        }
    46        else if(a[i].mins>x)///不符合要求
    47        {
    48            flag=0;
    49            break;
    50        }
    51     }
    52     if(flag)
    53     {
    54         printf("YES
    ");
    55     }
    56     else
    57     {
    58         printf("NO
    ");
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    my ReadBook_dianzishangwu / 2020216 / dianzishangwuwuliu
    my ReadBook_shichangyingxiao / 2020208
    C#编写的clock
    Java建立JProgressBar
    java基本类型byte的取值范围
    正则表达式整理大全
    (C#)如何利用Graphics画出一幅图表
    设置鼠标可以移动窗体
    Java编程提高性能的26个方法
    数据加密工具设计经验
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9740682.html
Copyright © 2011-2022 走看看