原题链接: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. VisualStudioCode中用dotnet命令创建多个ASP.NET Core 项目、类库、控制台程序,并添加应用间的引用

    一.准备工作 首先安装VisualStudioCode并且可以使用. 1.首先新创建空的MyApps文件夹,作为项目主目录,下面将在这个文件夹中创建多个web应用程序.类型.控制台程序等. 2.打开V ...

  2. .Net Core知识点

    1:const,readonly,和get访问器,三者都可在自己的生命域里赋值,但是编译器也是可以在构造函数里进行初始化赋值的 2:Debugger.IsAttached 属性 http://msdn ...

  3. 60道Python面试题&答案精选!找工作前必看

    需要Word/ PDF版本的同学可以在实验楼微信公众号回复关键词"面试题"获取. 1. Python 的特点和优点是什么? 答案:略. 2. 什么是lambda函数?它有什么好处? ...

  4. 修改haproxy配置文件

    需求: 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ ...

  5. cacheline基本理论

    一.cacheline 1.cache:解决cpu频率与内存访问之间速度差距越来越大的问题 2.cacheline:cpu cache的最小单位,主流为64B 3.指导:访问数组数据在同一个cache ...

  6. localforage调用setItem时出现DOMException错误的解决方法

    今天使用localforage时出现下面的错误: Uncaught (in promise) DOMException transaction.onabort.transaction.onerror ...

  7. Mysql 导入CSV文件,中文内容乱码问题

    项目中用到含有中文字段的数据CSV文件,导入Mysql数据中发现中文内容乱码. 分析原因:因为数据库字符编码问题引起. [1]创建utf-8字符集数据库 CREATE DATABASE db_name ...

  8. 哨兵2 NDVI

    shp从国外网站下载的,不是很准确了 数据:COPERNICUS/S2 交流合作请联系:ab000c@163.com

  9. virtualenv的使用

    virtualenv 是一个创建隔绝的Python环境的工具.在向服务器导入第三方库的时候特别有用. 1.首先,安装virtualenv pip install virtualenv 2.创建一个虚拟 ...

  10. C#导出文本内容到word文档源码

    将做工程过程中较好的代码片段珍藏起来,下面的代码内容是关于C#导出文本内容到word文档的代码,希望能对小伙伴们也有好处.<%@ Page Language="C#" Aut ...