#P1003. 猜数字
猜数字
Background
这是一个交互题的模板。
Description
系统会随机生成 个数 ,你需要猜测出这 个数的值。请尽量保证你的猜测次数在 之内。
Format
为了更清晰地演示交互题的使用方法,我们设计了三种操作:
get_num
:获取需要猜测的数字数量 。本操作不包含参数。guess
:猜测某个数字。本操作包含 2 个参数:需要猜测的数字的序号(从 0 开始)以及猜测值。当你猜测的值小于实际值时,返回值为-1
;当你猜测的值大于实际值时,返回值为1
;当恰好猜对时,返回值为0
。submit
:提交猜测结果。本操作包含 个参数,即 个数的猜测结果。本操作没有返回值。
当你想要进行某个操作时,请向标准输出流中写入如下格式的字符串:
<操作名称> <操作参数 1> <操作参数 2> ... <操作参数 n>
你必须在请求后追加换行符;多余的空白字符将被自动忽略。
在收到用户程序发送的请求后,交互器会向用户程序的标准输入流中发送返回值。你只需在你的程序中使用通常的办法读入这个值,就好像是从控制台或文件中读取内容一样。交互器将在发送返回值后再附加一个换行符 \n
,以便于用户程序读入。本题目的操作返回值都是数字,因此直接读入数字即可。
请注意,很多语言的输入 / 输出库都会带有缓存,请在写入操作请求后手动刷新缓存,以确保请求顺利递送。
C | fflush(stdout) |
C++ | std::cout << std::flush |
Java | System.out.flush() |
Python | sys.stdout.flush() |
Pascal | flush(output) |
Rust | std::io::stdout().flush().unwrap() |
Haskell | hFlush stdout |
Go | Unbuffered |
可以参考附加文件中的 C++ 实现 interaction.h
Samples
1
-1
0
get_num
guess 0 802
guess 0 806
submit 806
Limitation
数量 要猜测的数字
对于每个测试点,设你的猜测次数为 ,则你的得分为 。
每次猜测均为 I / O 操作,消耗时间较多,如果猜测次数过多将导致超时。
Attachment
interaction.h
#include <iostream>
#include <vector>
int get_num()
{
std::cout << "get_num" << std::endl << std::flush;
int ret;
std::cin >> ret;
return ret;
}
int guess(int index, int x)
{
std::cout << "guess " << index << " " << x << std::endl << std::flush;
int ret;
std::cin >> ret;
return ret;
}
void submit(const std::vector<int> &result)
{
std::cout << "submit ";
for (std::vector<int>::const_iterator iter = result.begin(); iter != result.end(); iter++)
{
std::cout << *iter << " ";
}
std::cout << std::endl << std::flush;
}
template.cpp
#include "interaction.h"
int solve(int i) {
// TODO: add your code here
}
int main() {
int n = get_num();
std::vector<int> a(n);
for (int i = 0; i < n; i++) {
a[i] = solve(i);
}
submit(a);
}