Type: Interactive 1000ms 256MiB

猜数字

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

系统会随机生成 nn 个数 AiA_i,你需要猜测出这 nn 个数的值。请尽量保证你的猜测次数在 1000n1000n 之内。

Format

为了更清晰地演示交互题的使用方法,我们设计了三种操作:

  1. get_num:获取需要猜测的数字数量 nn 。本操作不包含参数。
  2. guess:猜测某个数字。本操作包含 2 个参数:需要猜测的数字的序号(从 0 开始)以及猜测值。当你猜测的值小于实际值时,返回值为 -1;当你猜测的值大于实际值时,返回值为 1;当恰好猜对时,返回值为 0
  3. submit:提交猜测结果。本操作包含 nn 个参数,即 nn 个数的猜测结果。本操作没有返回值。

当你想要进行某个操作时,请向标准输出流中写入如下格式的字符串:

<操作名称> <操作参数 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

数量 1n1001 \leq n \leq 100 要猜测的数字 0Ai10000000 \leq A_i \leq 1000000

对于每个测试点,设你的猜测次数为 xx,则你的得分为 max(min(100,(950(xn100))/950×100),0)\max(\min(100, (950 - (\frac{x}{n} - 100)) / 950 \times 100), 0)

每次猜测均为 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);
}