bzoj3715 [PA2014]Lustra 模拟

Description


Byteasar公司专门外包生产带有镜子的衣柜。
刚刚举行的招标会上,有n个工厂参加竞标。所有镜子都是长方形的,每个工厂能够制造的镜子都有其各自的最大、最小宽度和最大、最小高度。镜子不可以旋转。
如果存在某家工厂满足这样的条件:其他所有工厂能够制造的镜子,它都能够制造。那么这家工厂显然会胜出。若不存在,评判工作将会遇到麻烦。Byteasar想知道,是否存在某家工厂符合上述条件。

第一行有一个整数t(1<=t<=10),表示测试数据数量。
对于每一组测试数据,第一行有一个整数n(2<=n<=100000)。接下来n行,每行有四个整数w1,w2,h1,h2(1<=w1<=w2<=10^9,1<=h1<=h2<=10^9),表示这家工厂能够制造的镜子的宽度w、高度h需要满足w1<=w<=w2,h1<=h<=h2。

Solution


虽水题犹未1A,值得反思
直接找到长最大的同时宽最大的判断就行
一开始错是因为可能出现全部的w和h都相等的情况,这样初始的最大值一定要在输入中出现

Code


#include <stdio.h>
#include <string.h>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const int N=200005;

struct Mir {int w1,w2,h1,h2;} mir[N];

int read() {
    int x=0,v=1; char ch=getchar();
    for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());
    for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());
    return x*v;
}

int main(void) {
    for (int T=read();T--;) {
        int n=read(),rec=1;
        rep(i,1,n) mir[i]=(Mir) {read(),read(),read(),read()};
        rep(i,2,n) {
            if (mir[i].w2-mir[i].w1>mir[rec].w2-mir[rec].w1) rec=i;
            else if (mir[i].w2-mir[i].w1==mir[rec].w2-mir[rec].w1&&mir[i].h2-mir[i].h1>mir[rec].h2-mir[rec].h1) rec=i;
        }
        bool flag=false;
        rep(i,1,n) {
            if (mir[i].w1>=mir[rec].w1&&mir[i].w2<=mir[rec].w2&&mir[i].h1>=mir[rec].h1&&mir[i].h2<=mir[rec].h2) {
                continue;
            }
            flag=true; break;
        }
        if (flag) puts("NIE");
        else puts("TAK");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/jpwang8/article/details/80412169