BJTU1931 铁憨憨骑士团的中央空调

这篇博客讲述了如何解决一道编程竞赛题目,该题目涉及一个铁憨憨骑士团的中央空调设定问题。题目要求确定是否能设置一个恒定温度,使所有骑士对温度的需求得到满足。博主通过分析发现,需要考虑最低温度的最大值和最高温度的最小值,并检查这两个值是否在空调的调节范围内。博主分享了错误思考的陷阱,并提供了完整代码来解决这个问题。
摘要由CSDN通过智能技术生成

BJTU1931 铁憨憨骑士团的中央空调

题目:

在遥远的憨憨王国,有一个铁憨憨骑士团。

夏天来了,铁憨憨骑士团要开始使用中央空调啦!

骑士团的中央空调是一台可以调节温度的空调,温度上限为 𝑏
,下限为 𝑎

。全骑士团都使用这一台中央空调来制冷,因此,整个骑士团的温度都会是一样的。

骑士团里的骑士们对温度有各自的需求。一共有 𝑛
位骑士向团长提出了需求,这些需求要么是温度不能低于 𝑎𝑖 度,要么是温度不能高于 𝑎𝑖

度。为了保持稳定不出故障,整个夏天中央空调的温度必须是一个恒定的温度。

现在,团长想要知道,能不能满足所有骑士的要求?

输入数据:

第一行三个整数 𝑛,𝑎,𝑏 (1≤𝑛≤105,1≤𝑎≤𝑏≤109),分别表示提出需求的骑士数量、空调调节温度的下限和上限。
接下来一共 𝑛 行,每行两个整数 𝑡𝑝 和 𝑎𝑖 (1≤𝑡𝑝≤2,1≤𝑎𝑖≤109),分别表示需求的类型和温度。如果 𝑡𝑝=1,说明这个需求是温度不能低于 𝑎𝑖 ,否则是温度不能高于 𝑎𝑖 。

输出数据:

如果可以满足条件,则输出YES,否则输出NO。

时间限制 1000 ms   内存限制 256 MB

解释:

这道题其实比较简单,执行就完事(但是为什么我还是WA了好几次呢…),WA就是问题考虑得不周全。所以写个博客记录一下当是给自己的警醒吧。

大家都能想到,取骑士团最低温度的最大值lowone,取最高温度的最小值topone,利用中学知识存在性问题。

只要有一个比最低温度的最大值大的就行,所以就是 lowone <= b

同理,只要有一个比最高温度的最小值小的就行,所以 topone >= a

就完了吗?必然没得。

仔细想想,如果骑士团的憨憨们要求的最低温度的最大值已经超过了他们另一部分人要求的最高温度的最小值怎么办?

那不管空调可调范围在哪儿都没得办法,所以这就是考虑问题不周全导致的错误了(还是很难找的错误。。找到怀疑人生)

所以话不多说,代码就比较好写了:

#include<cstdio>
#include<algorithm>
#include<string>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>

using namespace std;

int main()
{
	long long n,a,b;
	long long topone;
	long long lowone;
	long long top[100005];
	long long low[100005];
	long long p = 0,q = 0;

	cin>>n>>a>>b;
	while(n--)
	{
		int temp;
		long long am;
		cin>>temp>>am;
		if(temp == 1)
		{
			low[p++] = am;
		}
		else
		{
			top[q++] = am;
		}
	}

	topone = top[0];
	for(long long i = 0; i < q;i++)
	{
		if(top[i] < topone)
		{
			topone = top[i];
		}
	}
	lowone = low[0];
	for(long long i = 0; i < p;i++)
	{
		if(low[i] > lowone)
		{
			lowone = low[i];
		}
	}
	if(lowone <= b && topone >= a && lowone <= topone)
	{
		cout<<"YES"<<endl;
	}
	else
	{
		cout<<"NO"<<endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值