首页 > 其他分享 >CF1780D Bit Guessing Game

CF1780D Bit Guessing Game

时间:2023-02-02 08:11:05浏览次数:59  
标签:std Guessing now 10 int CF1780D 30 Bit include

题目链接 - https://codeforces.com/contest/1780/problem/D

终端有一个需要猜的数 \(x\),\(x\leq 10^9\),每轮终端会给你返回一个数 \(a\) 表示 \(x\) 在二进制下有多少个 \(1\) ,你每次可以选择对终端发出 - b 的请求,终端会将 \(x\) 减 \(b\),并重复上述操作,或者直接给出对原始的 \(x\) 的答案猜测,你需要在 \(30\) 次操作以内猜出 \(x\)

二进制下 \(10^9\) 刚好 \(30\) 位,也就是说我们平均每一次操作要至少确定二进制下的一位,设 \(x = \sum c_i * 2^i\),从 \(i = 0\) 开始,我们如果减去 \(2^i\) 后,返回值表示 \(1\) 的数量变少了,那么 \(c_i = 1\),否则 \(c_i = 0\)

注意每一次执行这个操作的时候只能代表当前的 \(x\) 的情况,最后还是要靠这些信息推断原来的 \(x\) 的信息的

代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>

using i64 = long long;
using namespace std;

const int N = 2e6 + 10, inf = 0x3f3f3f3f;

int main() {
	int T; std::cin >> T;
	while (T--) {
		int now, then, ans = 0, t = 0; std::cin >> now;
		for (int i = 0; i < 30; i++) {
			printf("- %d\n", 1 << i); fflush(stdout);
			std::cin >> then;
			if (then < now) {ans += 1 << i;}
			if (then >= now) {ans += 1 << i + 1; t++;}
			now = then; if (then == t || !now) break;
		}
		printf("! %d\n", ans); fflush(stdout);
	}
	return 0;
}

标签:std,Guessing,now,10,int,CF1780D,30,Bit,include
From: https://www.cnblogs.com/zrzring/p/CF1780D.html

相关文章

  • CF1780E Bit Guessing Game
    题目链接-https://codeforces.com/contest/1780/problem/E给定一张无向图,其中有\(R-L+1\)个点,编号从\(L\)到\(R\),每两个点\(u\),\(v\)间连一条边,边权为\(gc......
  • bitset小专题(待续)
    bitset:一个01位如果用bool存的话需要1byte,而用bitset只需要1bit(=1/8byte)每次两个集合取并的时候可以除以一个大常数(32/64),从而优化复杂度LOJ515设\(dp[i]\)表示考......
  • RabbitMQ初步学习
    一:什么是MQ?MQ是消息队列,主要为了解决传统消息传递上管理困难的问题。MQ有三大优点:异步、削峰、解耦异步:比如淘宝,当下了订单后,系统会走积分系统、物流系统、供货商系统......
  • RabbitMQ在服务里查看显示已经成功,但无法访问web端
    参考链接:https://blog.csdn.net/weixin_42753193/article/details/128770009 网上大多数方法大致如下:1、进入安装目录cd你的RabbitMQ安装目录\sbin2、打开节点:r......
  • RabbitMq使用中常见错误--python版
    用python的pika库错误集 一、pika.exceptions.ProbableAuthenticationError:ConnectionClosedByBroker:(403)‘ACCESS_REFUSED-Loginwasrefusedusingauthentica......
  • mybits_基础
    1.框架:一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求2.ORM:对象关系映射,数据和实体对象的映射3.MyBatis:是一个优秀的基于Java的持久层框架,它内部封......
  • RabbitMQ的连接方式
    一、帐号密码连接    直接设置各个属性值,其中许多属性有其默认值,例如    connection=pika.BlockingConnection(pika.ConnectionParameters(virtual_host......
  • linux debian安装erlang和rabbitmq
    debian系安装rabbitmq的服务端安装erlang本文讲rabbitmq。erlang语言环境就root快捷安装,方便学习(erlang版本23.x)aptinstallerlang安装rabbitmq-server安装仓......
  • RabbitMQ基本原理及模式介绍
    一、RabbitMQ概念RabbitMQ:是一个由erlang开发的AMQP(AdvancedMessageQueue高级消息队列协议)的开源实现,由于erlang语言的高并发特性,性能较好,本质是个队列,FIFO先入先......
  • rabbitmq 延时消息队列
    //rabbitmq延时消息队列生产端demo//1.将消息发送到延时交换机对应的队列上delay-queue,指定过期时间;过期后转发的交换机和绑定的key//2.过期时间过期......