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;
}