原题链接:https://loj.ac/problem/6

Guess Number

内存限制:256 MiB

时间限制:1000 ms

题目类型:交互

题目描述

这是一个交互题的模板。

系统会随机生成\(n\)个数\(A_i\),你需要猜测出这\(n\)个数的值。暴力枚举/ 二分/ 随机猜测等方法都可以解决这个问题,但得分将依猜测次数而定。

交互方式

使用 C++ 与 C++11 的选手将可以利用系统给出的交互库来进行交互。

使用其他语言的选手也不必担心,我们提供了一个友好的交互接口,你将能够轻而易举地通过标准输入 / 输出来进行交互。

不使用交互库

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

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

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

<操作名称> <操作参数 1> <操作参数 2> ... <操作参数 n>

你必须在请求后追加换行符;多余的空白字符将被自动忽略。

在收到用户程序发送的请求后,交互器会向用户程序的标准输入流中发送返回值。你只需在你的程序中使用通常的办法读入这个值,就好像是从控制台或文件中读取内容一样。交互器将在发送返回值后再附加一个换行符\n,以便于用户程序读入。本题目的操作返回值都是数字,因此直接读入数字即可。

提示

很多语言的输入/ 输出库都会带有缓存,请在写入操作请求后手动刷新缓存,以确保请求顺利递送。

C++ 语言可以这样刷新缓存(std::endl 会自动刷新缓存):

std::cout << std::flush; // 或 std::cout << value << std::endl;

提交猜测结果后,即可结束程序。交互器退出时,如果用户程序还在运行,就会被立即终止,但不会引发超时错误。

使用交互库

对于 C++ 与 C++11 选手,我们提供交互库 interaction.h,你将可以通过题目上方的「附加文件」下载到这个交互库。正式比赛时交互库也将是公开的。

当然,你可以选择不使用交互库,自己通过标准输入输出来通信。

C++ 与 C++11 的 interaction.h 将包含三个原型如下的函数:

int get_num();
int guess(int index, int x);
void submit(const std::vector<int> &resultv);

参数的意义及返回值请参见上面的描述。

附注1 文件说明

「附加文件」中的 interaction.h 为供用户调用的交互库;interactor.cpp 为交互器。

附注2 C 与 C++ #include说明

#include <file> 表示在标准库及默认搜索目录中寻找将要 include 的文件;

#include "file" 表示先在当前目录中搜索文件,然后再到默认搜索目录中搜寻。

在提交交互题时,请使用 #include "interaction.h"

输入格式

输入文件是供交互器使用的;一般用户无需在意这里的内容,只需关心如何与交互器交互即可。

第一行一个正整数\(n\),表示有\(n\)个数,第二行\(n\)个正整数表示要猜的序列。

样例

样例输入

5

1 2 3 4 5

数据范围与提示

数量: \(1\le n\le 100\);

要猜测的数字: \(0\le A_i\le 1000000\)

请尽量保证你的猜测次数在\(1000n\)之内,对于每个测试点,设你的猜测次数为\(x\),则你的得分为 \(max(min(100,(950−(x/n−100))/950×100),0)\)

每次猜测均为 I / O 操作,消耗时间较多,如果猜测次数过多将导致超时。

题目大意:使用高效率的方式猜测数据

题目思路:使用二分法

#include <stdio.h>
#include <stdlib.h> #define MAX 1000000 int guess(int i)
{
int l=0,r=MAX,m;
int status;
while (l < r)
{
m = (l+r) >> 1;
printf("guess %d %d\n", i, m);
fflush(stdout);
scanf("%d", &status);
switch (status)
{
case -1:
l = m + 1;
break;
case 1:
r = m - 1;
break;
case 0:
return m;
}
}
return l;
} int main()
{
int n, a[100];
printf("get_num\n");
fflush(stdout);
scanf("%d", &n);
for (int i=0; i<n; i++)
a[i] = guess(i);
printf("submit");
for (int i=0; i<n; i++)
printf(" %d", a[i]);
printf("\n");
fflush(stdout);
}

loj #6.Guess Number的更多相关文章

  1. [LOJ#2327]「清华集训 2017」福若格斯

    [LOJ#2327]「清华集训 2017」福若格斯 试题描述 小d是4xx9小游戏高手. 有一天,小d发现了一个很经典的小游戏:跳青蛙. 游戏在一个 \(5\) 个格子的棋盘上进行.在游戏的一开始,最 ...

  2. [BZOJ3990][SDOI2015][LOJ#2181]-排序

    说实话,这个题真好(?) <BZOJ题面> <LOJ题面> 看到这个题,一时没有思路 但是 我想到了一个错解:归并 这个题真的有一点把我们的思路往归并上引 于是WA10 诶?我 ...

  3. Note - Powerful Number

    Powerful Number   对于 \(n\in\mathbb N_+\),若不存在素数 \(p\) 使得 \(p\mid n~\land~p^2\not\mid n\),则称 \(n\) 为 ...

  4. JavaScript Math和Number对象

    目录 1. Math 对象:数学对象,提供对数据的数学计算.如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 2. Number 对象 :Js中提供数字的对象.包含整数.浮 ...

  5. Harmonic Number(调和级数+欧拉常数)

    题意:求f(n)=1/1+1/2+1/3+1/4-1/n   (1 ≤ n ≤ 108).,精确到10-8    (原题在文末) 知识点:      调和级数(即f(n))至今没有一个完全正确的公式, ...

  6. Java 特定规则排序-LeetCode 179 Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  7. Eclipse "Unable to install breakpoint due to missing line number attributes..."

    Eclipse 无法找到 该 断点,原因是编译时,字节码改变了,导致eclipse无法读取对应的行了 1.ANT编译的class Eclipse不认,因为eclipse也会编译class.怎么让它们统 ...

  8. 移除HTML5 input在type="number"时的上下小箭头

    /*移除HTML5 input在type="number"时的上下小箭头*/ input::-webkit-outer-spin-button, input::-webkit-in ...

  9. iOS---The maximum number of apps for free development profiles has been reached.

    真机调试免费App ID出现的问题The maximum number of apps for free development profiles has been reached.免费应用程序调试最 ...

随机推荐

  1. GMT\UTC YYYY-MM-DDTHH:mm:ss.sssZ、YYYY-MM-DDTHH:mm:ss.sss+8:00意义及与北京时间转换

    UTC: Universal Time Coordinated 协调世界时,又称世界标准时间. GMT: Greenwich Mean Time 格林尼治平均时. 格林尼治标准时间的正午是指当太阳横穿 ...

  2. org.springframework.boot.web.server.WebServerException: Unable to create tempDir. java.io.tmpdir is set to C:\Users\ADMINI~1\AppData\Local\Temp\2\

    问题原因:springboot创建临时文件找不到对应的目录 解决办法:1. 重新指定临时文件位置  java -Djava.io.tempdir=D:/tmpdir -jar -my_project. ...

  3. webpack4.27.1中遇到的错误

    1:ERROR in Entry module not found: Error: Can't resolve './src' 我在使用webpack命令时报错,这时因为我的配置文件有问题webpac ...

  4. phpstudy2018 安装xdebug扩展

    第一步:查看PHP版本信息 第二步:到xdebug下载页去下载最新的版本(注意:要下载PHP对应版本) 第三步:把扩展php_xdebug-2.7.0alpha1-7.2-vc15-nts.dll放到 ...

  5. msbuild 编译指定工程时构建脚本的配置

    有时候 ,我们编译windows的exe时,我们不需要编译所以的工程,我们只需要指定某个工程就好了,此时我们使用/t:工程名:Rebuild(如果要编译全部工程就把工程名去掉,即/t:Rebuild) ...

  6. js写一个chrome 插件

    访问网站的时候,最烦的就是一些弹窗和广告.于是,就想着能不能在访问特定网站的时候,执行一段js脚本,去除页面的广告.于是乎,好像 chrome 插件可以实现. 这里,以 百度 的网站为例 新建 sim ...

  7. 扎实学Java之数组与方法

    什么是数组? 数组是一个容器,用来存储多个数据(数据类型相同) 声明一个数组就是在内存中开辟一串连续的空间 数组的结构和基本要素 标识符:数组的名称,用于区分不同的数组 数组元素:向数组中存放的数据 ...

  8. React组件绑定this的三种方法

    我们在使用React组件时,调用方法常常用到this和event对象,默认情况是不会绑定到组件上的,需要特殊处理. 节点上使用bind绑定 特点:该方法会在每次渲染组件时都会重新绑定一次,消耗一定的性 ...

  9. windows CMD常用命令

    命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...

  10. C# 链表反转

    链表反转分这么两种情况, 一种是链表头节点始终前置,那这时候需要传一个头节点特有的标记:(简称:头不转) HEAD->Test1->Test2->Test3->Test4 反转 ...