题目描述
猜数的规则非常简单。主持人会在心中想一个数y(-10000≤y≤10000),然后参与者通过询问主持人来猜这个数。下面是4种可接受的询问。
第1种询问:y是严格大于x吗?
第2种询问:y是严格小于x吗?
第3种询问:y是大于或等于x吗?
第4种询问:y是小于或等于x吗?
对于每个询问,主持人都会如实地回答“是”或者“否”。
给定一系列的询问和答案,请你找到满足所有答案的最小的y。如果不存在这样的y,输出“Impossible”(不含引号)。
输入输出格式
输入格式
第一行包含一个整数n,表示询问和答案的数量。
接下来n行,每行包含一个询问和一个答案,形式为“sign x answer”。
“sign”有4种可能,分别是“>”(第1 种询问),“<”(第2 种询问),“>=”(第3 种询问),“<=”(第4 种询问)。
“answer”有2种可能,分别是“Y”(表示“是”),“N”(表示“否”)。
所有询问中的x均满足-10000≤x≤10000。
输出格式
如果存在满足所有答案的y,那么输出一个最小的y,否则输出“Impossible”(不含引号)。
输入输出样例
输入样例一
4
>= 1 Y
< 3 N
<= -3 N
> 55 N
输出样例一
3
输入样例二
2
> 100 Y
<
-100 Y
输出样例二
Impossible
说明
数据规模
对于50%的数据,1≤n≤1000。
对于100%的数据,1≤n≤100000。
题解
每次都记录最小值和最大值,判断最小值是否大于最大值即可。
#include<iostream> #include<string> using namespace std; int n; int minn=3247483647,maxn=-3247483648; int x; char a; string s; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>s>>x>>a; if((s==">="&&a=='Y')||(s=="<"&&a=='N')) { if(x>minn) minn=x; } else if((s==">"&&a=='Y')||(s=="<="&&a=='N')) { if(x>=minn) minn=x+1; } else if((s==">"&&a=='N')||(s=="<="&&a=='Y')) { if(x<maxn) maxn=x; } else { if(x<=maxn) maxn=x-1; } } if(minn>maxn) cout<<"Impossible"; else cout<<minn; return 0; }参考程序