FZU 1575 小学生的游戏模拟二分

Posted Roni

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FZU 1575 小学生的游戏模拟二分相关的知识,希望对你有一定的参考价值。

某天,无聊的小斌叫上几个同学玩游戏,其中有比较笨的小兴,比较傻的小雪,可爱的小霞和自以为是的小楠。他们去找聪明的小明去给他们当裁判。判定谁取得游戏胜利。

而这个游戏是由小斌想个1到10000000的数字让大家猜,看谁先猜中。为了防止小斌作弊,小明记录下了游戏的整个过程。你的任务是判断小斌是否有作弊。

Input

输入数据包括多盘游戏。一次猜数包含两行,第一行是一个数字n(1<=n<=10000000),表示所猜数字。第二行是小斌的回答为"too high","too low","right on"三种答案之一。每盘游戏结束于"right on"。当n=0的时候,整个游戏结束。

Output

对于每盘游戏,若小斌确有撒谎,请输出一行"The guy is dishonest",否则请输出"The guy may be honest"。

Sample Input

10
too high
3
too low
4
too high
2
right on
5
too low
7
too high
6
right on
0

Sample Output

The guy is dishonest
The guy may be honest
【分析】:分别在too high和too low时比较数字的大小,选出最小low值和最大high值,比较right on说出的数字合法(在low和high范围内为合法)与否。注意置位!

【代码】:
技术分享图片
#include <iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
#define oo 10000000
int n;
char a[500];
/*模拟二分*/
int main()
{
    int low=-1,high=oo;
    while(~scanf("%d",&n),n)
    {
        getchar();
        gets(a);
        if(a[4]==h)
        {
            if(high>n)
                high=n;
        }
        if(a[4]==l)
        {
            if(low<n)
                low=n;
        }
        if(a[0]==r)
        {
            if(n<high&&n>low)
            {
                puts("The guy may be honest");
            }
            else
            {
                puts("The guy is dishonest");
            }
            low=-1,high=oo;
        }
    }
}
模拟

 

  

以上是关于FZU 1575 小学生的游戏模拟二分的主要内容,如果未能解决你的问题,请参考以下文章

FZU 2203 单纵大法好 (二分 && 贪心)

FZU-2216 The Longest Straight (二分枚举)

FZU ICPC 2020 寒假训练 4 —— 模拟(二)

[FZU2203] 单纵大法好(二分)

fzu 2039 Pets (简单二分图 + (最大流 || 二分图))

0913作业(冒泡排序二分查找法模拟摇乐游戏)