ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【题解】洛谷 P5995 [PA2014]Lustra

2020-11-18 08:02:33  阅读:257  来源: 互联网

标签:洛谷 int 题解 PA2014 符合要求 long key 区间 最值


题目传送门 \(\to\) 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\n");
		else printf("NIE\n");
	}
	return 0;
}

完结撒fa~

标签:洛谷,int,题解,PA2014,符合要求,long,key,区间,最值
来源: https://www.cnblogs.com/unknown-year/p/13997738.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有