洛谷 P1733 猜数(IO交互版)之交互题起步

洛谷P1733题解


传送锚点


摸鱼环节

猜数(IO交互版)

题目描述

评测机会在区间 \([1,10^9]\) 中选择一个整数,你应该写一个代码来猜测它。你最多可以问评测机 \(50\) 个问题。

对于每一次询问,你可以向评测机询问区间 \([1,10^9]\) 中的一个整数,评测机会返回:

  • 0,如果它为答案(即评测机所选的数字),且程序应该在此之后停止询问。
  • -1,如果它小于答案。
  • 1,如果它大于答案。

每次询问,你需要向标准输出输出一个 \([1,10^9]\) 中的整数,然后清空缓冲区

你可以使用如下语句来清空缓冲区:

  • 对于 C/C++:fflush(stdout)
  • 对于 C++:std::cout << std::flush
  • 对于 Java:System.out.flush()
  • 对于 Python:stdout.flush()
  • 对于 Pascal:flush(output)
  • 对于其他语言,请自行查阅对应语言的帮助文档。

特别的,对于 C++ 语言,在输出换行时如果你使用 std::endl 而不是 '\n',也可以自动刷新缓冲区。

然后你需要从标准输入中输入一个整数,代表评测机返回的结果。

输入格式

输出格式

提示

数据规模与约定

\(n\) 为答案。

  • 对于 \(50\%\) 的数据,保证 \(n \leq 51\)
  • 对于 \(100\%\) 的数据,保证 \(1 \leq n \leq 10^9\)

本题交互库

提示

本题参考程序:

#include <cstdio>
#include <iostream>

int main() {
  for (int l = 1, r = 1000000000, mid = (l + r) >> 1, res; l <= r; mid = (l + r) >> 1) {
    std::cout << mid << std::endl;
    std::cin >> res;
    if (res == 0) {
      return 0;
    } else if (res == -1) {
      l = mid + 1;
    } else if (res == 1) {
      r = mid - 1;
    } else {
      puts("OvO, I AK IOI"); // this statement will never be executed.
    }
  }
  return 0;
}

神马?这题怎么给标程了?这不直接ctrl大法咱假装没看到,毕竟也没写过交互题不得不说发明交互题的人也是个毒瘤天才。


正片开始


本题重点在于熟悉交互题的写法。

注意到:

每次询问,你需要向**标准输出**输出一个 $[1,10^9]$ 中的整数,**然后清空缓冲区**。

你可以使用如下语句来清空缓冲区:

- 对于 C/C++:`fflush(stdout)`;
- 对于 C++:`std::cout << std::flush`;
- 对于 Java:`System.out.flush()`;
- 对于 Python:`stdout.flush()`;
- 对于 Pascal:`flush(output)`;
- 对于其他语言,请自行查阅对应语言的帮助文档。

特别的,对于 C++ 语言,在输出换行时如果你使用 `std::endl` 而不是 `'\n'`,也可以自动刷新缓冲区。

so 还是endl更有性价比。

感觉交互题很反人类啊这道题很明显是中分二分一下值域。这标程着实不太好看


完整代码

#include<bits/stdc++.h>
using namespace std;

int main() 
{
    for(int l=1,r=1000000000,mid=(l+r)>>1,res;l<=r;mid=(l+r)>>1)
    {
        cout<<mid<<endl;
        cin>>res;
        if (res==0) return 0;
        else if (res==-1) l=mid+1;
        else if (res==1) r=mid-1;
        else puts("OvO, I AK IOI");
    }
    return 0;
}

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

posted @ 2024-08-22 09:48  Nightmares_oi  阅读(1)  评论(0编辑  收藏  举报