当前位置: 首页 > news >正文

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). )

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). )

在这里插入图片描述
在这里插入图片描述

题目大意:

在这个交互式问题中,你需要通过查询系统,逐步找出隐藏的位字符串 S。给定一个偶数 n,表示目标位字符串 S 的长度,你需要通过与系统交互,查询一组长度为 n 的二进制字符串 Q。系统会返回一个整数,表示字符串 Q 与目标字符串 S 在对应位置上相同的位数。

定义一个交互问题 Jump(Q),如下所示:

  • OneMax(Q) = nOneMax(Q) = n / 2 时,Jump(Q) 返回 OneMax(Q)
  • 其他情况下,Jump(Q) 返回 0

其中 OneMax(Q) 表示字符串 Q 中与隐藏字符串 S 相同的位数。你的目标是通过最少的查询次数,找出字符串 S

问题的特点:

  • 其实你会发现,你找到n/2的答案时用不了任何算法,你如直接挂茅台随机。
  • 因为你会发现随机出答案 n/2 容易得多,不需要花多少次数,你不能指望直接随机到 n,因为这几乎不可能。
  • 从 n/2 推到n就很简单了吧,先把第一位翻转,之后循环后面的每一位,看看与第一位上的数正误是否相同。就这么简单。

题解思路:

本题的关键在于如何通过交互查询逐步逼近隐藏的字符串 S。可以通过以下步骤实现:

  1. 随机生成字符串:首先可以随机生成一个二进制字符串 Q,并查询系统的反馈值。如果反馈值为 n,则说明已经找到正确的字符串,直接退出。

  2. 逐步修改字符串:如果查询的结果不是 n,则意味着 QS 不完全相同。在这种情况下,我们可以逐步修改 Q,通过改变某些位,并再次查询,直到找到正确的字符串。修改的方法可以是根据当前查询的反馈,逐步调整字符串,直到最终使查询结果为 n

  3. 查询反馈:对于每一次查询,你会得到反馈:

    • 0:表示 QS 在任何位置上都没有匹配。
    • n / 2:表示 QSn / 2 个位置上匹配。
    • n:表示 Q 完全匹配 S
  4. 优化查询次数:尽可能减少查询次数。通过不断逼近目标字符串 S,每次通过修改少量位来增加匹配的位数,从而更快找到 S

代码解析:

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define BoBoowen ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int N = 5e5 + 10;
mt19937 rnd(114514);  // 用于生成随机数int n;// 用于发送查询并获取反馈
int query(string s)
{int ans = 0;cout << s << endl;  // 输出查询字符串cin >> ans;         // 获取反馈return ans;
}// 生成一个随机的查询字符串并进行查询
string pre()
{while (1){string s;for (int i = 0; i < n; i++)  // 生成长度为n的随机二进制字符串{s += rnd() % 2 + '0';}int ans = query(s);  // 查询if (ans == n)  // 如果完全匹配,退出{exit(0);}if (ans == n / 2)  // 如果有n/2个匹配位,返回该字符串return s;}
}signed main()
{cin >> n;  // 读取字符串长度string t = pre();  // 生成随机字符串并进行查询t[0] ^= 1;  // 翻转第一个字符vector<int> s1;s1.push_back(0);// 尝试修改其他字符for (int i = 1; i < n; i++){t[i] ^= 1;  // 翻转第i个字符int ans = query(t);  // 查询t[i] ^= 1;  // 恢复原状态if (ans != n / 2)  // 如果返回的结果不是n/2,则记录该字符位置s1.push_back(i);}t[0] ^= 1;  // 恢复第一个字符for (auto v : s1)  // 翻转记录的字符位置t[v] ^= 1;int ans = query(t);  // 再次查询if (ans == n)  // 如果完全匹配,退出return 0;if (ans == 0)  // 如果没有匹配,翻转所有位输出{for (int i = 0; i < n; i++)t[i] ^= 1;cout << t;return 0;}
}

代码流程:

  1. 生成随机字符串并查询

    • 通过 pre() 函数生成一个随机的二进制字符串,并查询系统的反馈值。
    • 如果反馈值为 n,说明已经找到目标字符串,程序终止。
    • 如果反馈值为 n / 2,返回该字符串进行进一步操作。
  2. 修改字符串并查询

    • 对生成的随机字符串逐步修改,翻转某些位,检查每次修改后的反馈结果。
    • 如果反馈值为 n / 2,则继续修改,直到找到正确的字符串。
  3. 输出结果

    • 当查询结果为 n 时,输出结果并退出。
    • 如果查询结果为 0,说明字符串完全不同,需要将所有位翻转并输出。

总结:

这道题目需要通过查询与反馈来逐步找出隐藏的目标字符串。通过对字符串的逐位修改和反馈的解析,我们能够有效地逼近并最终找到目标字符串 S

相关文章:

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). )

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). ) 题目大意&#xff1a; 在这个交互式问题中&#xff0c;你需要通过查询系统&#xff0c;逐步找出隐藏的位字符串 S。给定一个偶数 n&#xff0c;表示目标位字符串 S 的长度&#xff0c;你需要通…...

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了&#xff0c;为了找出这个bug, 星期六的晚上我从9点查到0点多&#xff0c;此时我心中一万个草泥马在崩腾&#xff0c;超级想骂人&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; uniCloud 不想…...

【Linux】冯诺依曼体系与操作系统理解

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、冯诺依曼体系结构 二、操作系统 1. 操作系统的概念 2. 操作系统存在的意义 3. 操作系统的管理方式 4. 补充&#xff1a;理解系统调用…...

STM32之软件SPI

SPI传输更快&#xff0c;最大可达80MHz&#xff0c;而I2C最大只有3.4MHz。输入输出是分开的&#xff0c;可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意&#xff1a;所有设备需要共地&#xff0c;时钟线主机输出&…...

Python零基础学习第三天:函数与数据结构

一、函数基础 函数是什么&#xff1f; 想象你每天都要重复做同一件事&#xff0c;比如泡咖啡。函数就像你写好的泡咖啡步骤说明书&#xff0c;每次需要时直接按步骤执行&#xff0c;不用重新想流程。 # 定义泡咖啡的函数 def make_coffee(sugar1): # 默认加1勺糖 print("…...

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

问题&#xff1a;启动wsl里的Ubuntu24报错 报错信息&#xff1a; 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件&#xff0c;并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息&#xff0c;请访…...

顶点着色器和片段着色器

在Unity渲染中&#xff0c;**顶点着色器&#xff08;Vertex Shader&#xff09;和片段着色器&#xff08;Fragment Shader&#xff09;**是图形渲染管线中的两个核心阶段。我们可以通过一个比喻来理解它们的分工&#xff1a;想象你要画一幅由三角形组成的3D模型&#xff0c;顶点…...

std::optional详解

基础介绍 c17版本引入了std::optional特性&#xff0c;这一个类模板&#xff0c;基本的使用方法如下&#xff1a; std::optional<T> 这个新特性的含义是利用std::optional<T>创建的某个类型的对象&#xff0c;这个对象存储某个类型的值&#xff0c;这个值可能存在…...

Web三件套学习笔记

<!-- HTML --> HTML是超文本标记语言 1、html常用标签 块级标签 独占一行 可以设置宽度&#xff0c;高度&#xff0c;margin,padding 宽度默认所在容器的宽度 标签作用table定义表格h1 ~ h6定义标题hr定义一条水平线p定义段落li标签定义列表项目ul定义无序列表ol定…...

Scala 中trait的线性化规则(Linearization Rule)和 super 的调用行为

在 Scala 中&#xff0c;特质&#xff08;Trait&#xff09;是一种强大的工具&#xff0c;用于实现代码的复用和组合。当一个类混入&#xff08;with&#xff09;多个特质时&#xff0c;可能会出现方法冲突的情况。为了解决这种冲突&#xff0c;Scala 引入了最右优先原则&#…...

C++入门——引用

C入门——引用 一、引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。这就好比《水浒传》中&#xff0c;一百零八位好汉都有自己的绰号。通过&…...

深度学习模型组件之优化器—Lookahead:通过“快慢”两组优化器协同工作,提升训练稳定性

深度学习模型组件之优化器—Lookahead&#xff1a;通过“快/慢”两组优化器协同工作&#xff0c;提升训练稳定性 文章目录 深度学习模型组件之优化器—Lookahead&#xff1a;通过“快/慢”两组优化器协同工作&#xff0c;提升训练稳定性1. Lookahead优化器的背景2. Lookahead优…...

K8s 1.27.1 实战系列(五)Namespace

Kubernetes 1.27.1 中的 ​Namespace​(命名空间)是集群中实现多租户资源隔离的核心机制。以下从功能、操作、配置及实践角度进行详细解析: 一、核心功能与特性 ​1、资源隔离 Namespace 将集群资源划分为逻辑组,实现 Pod、Service、Deployment 等资源的虚拟隔离。例如,…...

Spring Boot整合ArangoDB教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、环境准备 JDK 17Maven 3.8Spring Boot 3.2ArangoDB 3.11&#xff08;本地安装或Docker运行&#xff09; Docker启动ArangoDB docker run -d --name ar…...

虚幻基础:动画层接口

文章目录 动画层&#xff1a;动画图表中的函数接口&#xff1a;名字&#xff0c;没有实现。动画层接口&#xff1a;由动画蓝图实现1.动画层可直接调用实现功能2.动画层接口必须安装3.动画层默认使用本身实现4.动画层也可使用其他动画蓝图实现&#xff0c;但必须在角色蓝图中关联…...

从 GitHub 批量下载项目各版本的方法

一、脚本功能概述 这个 Python 脚本的主要功能是从 GitHub 上下载指定项目的各个发布版本的压缩包&#xff08;.zip 和 .tar.gz 格式&#xff09;。用户需要提供两个参数&#xff1a;一个是包含项目信息的 CSV 文件&#xff0c;另一个是用于保存下载版本信息的 CSV 文件。脚本…...

一、对lora_sx1278v1.2模块通信记录梳理

一、通信测试&#xff1a; 注意&#xff1a; 1、检查供电是否满足。 2、检测引脚是否松动或虚焊。 3、检测触发是否能触发。 引脚作用&#xff1a; SPI&#xff1a;通信&#xff08;仅作一次初始化&#xff0c;初始化后会进行模块通信返回测试&#xff0c;返回值和预定值相否即…...

Java在word中动态增加表格行并写入数据

SpringBoot项目中在word中动态增加表格行并写入数据,不废话,直接上配置和代码: 模板内容如下图所示: 模板是一个空word表格即可,模板放在resources下的自定义目录下,如下图示例。 实体类定义如下: @Data @AllArgsConstructor @NoArgsConstructor public class Person …...

[通讯协议]232通信

RS-232 简介 RS-232是一种广泛应用的串行通信接口标准&#xff0c;使用的协议就是串口协议。 通信能力 单端信号传输&#xff1a;信号以地线为参考&#xff0c;逻辑“1”为-3V至-15V&#xff0c;逻辑“0”为3V至15V。点对点通信&#xff1a;仅支持两个设备之间的通信&#x…...

Refreshtoken 前端 安全 前端安全方面

网络安全 前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的 介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢 网络安全汇总 XSSCSRF点击劫持SQL注入OS注入请求劫持DDOS 在我看来,前端可以了解并且防御前…...

EasyRTC嵌入式音视频通话SDK:基于ICE与STUN/TURN的实时音视频通信解决方案

在当今数字化时代&#xff0c;实时音视频通信技术已成为人们生活和工作中不可或缺的一部分。无论是家庭中的远程看护、办公场景中的远程协作&#xff0c;还是工业领域的远程巡检和智能设备的互联互通&#xff0c;高效、稳定的通信技术都是实现这些功能的核心。 EasyRTC嵌入式音…...

AI终章.展望未来2026-2030年预测与DeepSeek的角色

人工智能&#xff08;AI&#xff09;近年来发展迅速&#xff0c;正在改变行业、商业模式以及我们与技术互动的方式。展望2026-2030年&#xff0c;预计在多模态AI、自主代理和自动化驱动的新职业创造方面将出现革命性发展。本章将探讨这些趋势&#xff0c;以及DeepSeek将如何在这…...

PyTorch系列教程:编写高效模型训练流程

当使用PyTorch开发机器学习模型时&#xff0c;建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件&#xff0c;并演示如何构建一个精细的训练循环流程&#xff0c;有效地处理数据处理&#xff0c;向前和向后…...

【面试】Zookeeper

Zookeeper 1、ZooKeeper 介绍2、znode 节点里面的存储3、znode 节点上监听机制4、ZooKeeper 集群部署5、ZooKeeper 选举机制6、何为集群脑裂7、如何保证数据一致性8、讲一下 zk 分布式锁实现原理吧9、Eureka 与 Zk 有什么区别 1、ZooKeeper 介绍 ZooKeeper 的核心特性 高可用…...

电力系统中各参数的详细解释【智能电表】

一、核心电力参数 电压 (Voltage) 单位&#xff1a;伏特&#xff08;V&#xff09; 含义&#xff1a;电势差&#xff0c;推动电流流动的动力 类型&#xff1a;线电压&#xff08;三相系统&#xff09;、相电压&#xff0c;如220V&#xff08;家用&#xff09;或380V&#xff…...

前端系统测试(单元、集成、数据|性能|回归)

有关前端测试的面试题 系统测试 首先,功能测试部分。根据资料,单元测试是验证最小可测试单元的正确性,比如函数或组件。都提到了单元测试的重要性,强调其在开发早期发现问题,并通过自动化提高效率。需要整合我搜索到的资料中的观点,比如单元测试的方法(接口测试、路径覆…...

软件开发过程总揽

开发模型 传统开发模型 瀑布模型 #mermaid-svg-yDNBSwh3gDYETWou {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yDNBSwh3gDYETWou .error-icon{fill:#552222;}#mermaid-svg-yDNBSwh3gDYETWou .error-text{fill:#…...

VBA第二十期 VBA最简单复制整张表格Cells的用法

前面讲过复制整张表格的方法&#xff0c;使用语句Workbooks("实例.xlsm").Sheets("表格1").Copy Workbooks(wjm).Sheets(1)实现&#xff0c;这里用我们熟悉的Cells属性也可以实现整表复制。实例如下&#xff1a; Sheets("全部").Activate Cells…...

Redis为什么要自定义序列化?如何实现自定义序列化器?

在 Redis中&#xff0c;通常会使用自定义序列化器&#xff0c;那么&#xff0c;Redis为什么需要自定义序列化器&#xff0c;该如何实现它&#xff1f; 1、为什么需要自定义序列化器&#xff1f; 整体来说&#xff0c;Redis需要自定义序列化器&#xff0c;主要有以下几个原因&…...

Matlab:矩阵运算篇——矩阵数学运算

目录 1.矩阵的加法运算 实例——验证加法法则 实例——矩阵求和 实例——矩阵求差 2.矩阵的乘法运算 1.数乘运算 2.乘运算 3.点乘运算 实例——矩阵乘法运算 3.矩阵的除法运算 1.左除运算 实例——验证矩阵的除法 2.右除运算 实例——矩阵的除法 ヾ(&#xffe3;…...