#P1054. 【模板】函数式交互题

【模板】函数式交互题

题目描述

有一个隐藏的数 xx,经过猜测得到它。

本题是一道交互题,只能使用 C++ 语言,你不需要也不应该实现 main 函数。

你需要在代码中引入 guess.h

你需要实现以下函数:

  • int sol(int l,int r);
    • 该函数需要返回一个值,表示数 xx
    • 保证数 xx 满足 lxrl\le x\le r

你可以调用以下函数:

  • int guess(int a);
    • 该函数输入一个正整数 aalarl\le a\le r
    • a>xa>x,则返回 11;若 a<xa<x,则返回 1−1;若 a=xa=x,则返回 00
    • 该函数在一组数据中不能被调用超过 1010 次。
    • 如果猜测次数超过次数,其返回值未被定义。

样例

考虑以下调用:

  • sol(1,2);

我们进行以下猜测:

  • guess(2),返回值为 11

这里我们已经知道 xx 的值,因此返回 11

数据范围和限制

程序每次运行,sol 函数将会调用 TT 次。(1T10001\le T\le 1000)。

100%100\% 的数据,1lr1091\le l\le r\le 10^9rl+11024r-l+1\le 1024

额外信息

致出题人

如果你的题目没有也不需要标准答案,可以参考本题配置。

标程

本题标程,供参考:

#include "guess.h"
int sol(int l,int r){
    while(l<r){
        int mid=(l+r)>>1;
        int res=guess(mid);
        if(res==1)r=mid-1;
        else if(res==-1)l=mid+1;
        else return mid;
    }
    return l;
}