猜数字
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
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);
}
2023年中国科学院大学第一届“果萌杯”程序设计大赛(热身)
- Status
- Done
- Rule
- ACM/ICPC
- Problem
- 6
- Start at
- 2023-8-2 12:00
- End at
- 2023-8-6 17:00
- Duration
- 101 hour(s)
- Host
- Partic.
- 78