zoukankan      html  css  js  c++  java
  • 【题解】洛谷 P5995 [PA2014]Lustra

    题目传送门 ( o) HERE

    题目大意

    给定两条数轴和若干组区间 ([w1,w2])([h1,h2]),问是否存在一组区间使得其它所有区间在对应数轴上都是该区间的子集。

    分析

    其实就是询问区间总合的最值是否属于一组区间~

    但是我们也可以换种想法

    考虑到我们只需要关注当前要查询的区间与总区间的关系,并且题目并不要求我们必须求出符合要求的区间序号,可以只记录在当前区间之前的区间最值是否有满足条件的区间,并与当前区间进行比较。

    由上文我们可以明显地知道,如果当前有区间符合要求,则我们所记录的区间最值就是符合要求的区间,对结果没有影响。

    而当前区间与区间最值的关系也显而易见:如果是包含关系则当前区间可能符合要求,如果区间相交则说明当前区间不可能符合要求,如果被包含则当前状况不变

    上面分析的实现过程直接在输入过程中就可以实现~

    上代码!

    Code

    #include<bits/stdc++.h>
    #define ull unsigned long long
    #define ll long long
    #define db double
    using namespace std;
    int T,n;
    int w1,w2,h1,h2;
    int maw,miw,mah,mih;
    bool key;
    int main()
    {
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		scanf("%d%d%d%d",&miw,&maw,&mih,&mah);
    			//先将第一组数据作为总区间 
    		key=1;//key记录是否有数据符合要求 
    		for(int i=2;i<=n;i++){
    			scanf("%d%d%d%d",&w1,&w2,&h1,&h2);
    			if(w1<=miw && w2>=maw && h1<=mih && h2>=mah) key=1;
    				//当前输入的区间可以作为答案 
    			else if(w1>=miw && w2<=maw && h1>=mih && h2<=mah) key=key;
    				//被包含,无影响 
    			else key=0;
    			miw=min(miw,w1);
    			maw=max(maw,w2);
    			mih=min(h1,mih);
    			mah=max(h2,mah);
    				//更新总区间 
    		}
    		if(key) printf("TAK
    ");
    		else printf("NIE
    ");
    	}
    	return 0;
    }
    

    完结撒fa~

  • 相关阅读:
    NET下RabbitMQ实践[WCF发布篇]
    基于Mongodb分布式存储物理文件
    NET下RabbitMQ实践[实战篇]
    关于Memcache mutex设计模式的.net实现
    使用ServiceStackRedis链接Redis简介
    NET下RabbitMQ实践[示例篇]
    基于MongoDB分布式存储进行MapReduce并行查询
    Asp.Net开发小技巧汇总
    愈敏洪讲座
    图标下载利器
  • 原文地址:https://www.cnblogs.com/unknown-year/p/13997738.html
Copyright © 2011-2022 走看看