原题链接: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. mysql (六)

    约束: 非空约束: 创建表时添加: create table stu( id  int , name  varchar(20) not null ) 创建完表之后 alter table stu  m ...

  2. Redis的持久化之RDB方式

    RDB方式 Redis是默认支持的 优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件) 劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的.也就是积攒 ...

  3. mysql统计库下所有表数据行数

    一.执行下面sql select concat( 'select "', TABLE_name, '", count(*) from ', TABLE_SCHEMA, '.', T ...

  4. python基础之 序列化,os,sys,random,hashlib

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  5. flask框架中,利用数据库增删查改

    # 配置数据库app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:mysql@127.0.0.1:3306/booktest" ...

  6. Linux运维跳槽40道面试精华题

    Linux运维跳槽40道面试精华题 运维派 3天前 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护 ...

  7. Excel坐标自动在AutoCad绘图_2

    众所周知,Excel对数据处理的功能非常强大,它可以进行数据处理.统计分析已经辅助决策的操作,该软件已经渗透到各个领域.作为一个测绘人,GISer, 也经常利用excel完成一些测量表格的自动化计算, ...

  8. redis命令行操作

    打开shell,首先开启redis服务,在保证服务开启的情况下,打开客户端. 然后可以根据文档,进行命令行试验.

  9. maven 控制台 打包

    maven打包方法1.打开cmd,进入到项目的根目录2.执行命令:mvn clean package等待结束.结束后到目录的target子目录中找jar文件即可

  10. Git 工作环境配置

    Git config 简单介绍 Git的配置选项有:-system,-global 和 -local. ① system:系统级别的全局设置,对所有电脑用户生效,文件在/etc/gitconfig: ...