【题解】猜数

题目描述

  猜数的规则非常简单。主持人会在心中想一个数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;
}
参考程序

 

上一篇:PTA喊山


下一篇:jdk8递归生成节点树代码