题解:CF1937C(CF1936A)——Bitwise Operation Wizard

题解:CF1937C(CF1936A)——Bitwise Operation Wizard

一、 理解题意

1. 链接题目网址

CodeForces;

LuoGu。

2. 翻译英文题面

图片来源:洛谷

二、 设计算法

1. 观察数据范围

读题发现 ∑ n ≤ 1 0 4 \sum n\leq 10^4 n104,因此考虑 O ( n ) O(n) O(n) 做法,当然是直接操作一些结论

2. 思考合理解法

前置一个重点

如果想比较两个数(比如 p a , p b p_a,p_b pa,pb)的大小,我们可以询问“? a a b b”。

显然,最终异或起来的两个数中一定有一个是 n − 1 n-1 n1

怎样找到 n − 1 n-1 n1 呢?我们自然可以用正常取最大值的方法——打擂台,只不过比较大小的操作变成了上面的询问操作。这样,找到 n − 1 n-1 n1 就需要耗费我们 n − 1 n-1 n1 次询问。

显然,如果一个数和 n − 1 n-1 n1 异或起来最大,那么它和 n − 1 n-1 n1 按位或起来也应该是最大,并且它是所有与 n − 1 n-1 n1 按位或最大的数中最小的一个。对于每一位,如果 n − 1 n-1 n1 的是 0 0 0,它必然是 1 1 1,否则显然选择 0 0 0 的那个最终的值最小,显然,按照这种规则找到的数就是我们的答案。

找到与 n − 1 n-1 n1 按位或起来最大的数也是打擂台,用 n − 1 n-1 n1 次,在过程中我们搞一个 set 把所有“和 n − 1 n-1 n1 按位或起来最大的数”扔进去,最后在这个 set 里找出一个最小的——也是打擂台,最多要用 n − 1 n-1 n1 次。

显然最终的答案就是 n − 1 n-1 n1 的位置和最后一次打擂台打出来的位置。

最终,我们发现,我们可以用不超过 3 n − 3 3n-3 3n3 次询问就解决这个问题,妥妥的 AC。

3. 分析时间代价

O ( n ) O(n) O(n)

三、 实现代码

#include<bits/stdc++.h>
#define N 11000
using namespace std;
int t,n;
char c;
set<int>ret;
char act_or(int a,int b,int k);
bool bigger(int a,int b);
int main(){
	fflush(stdout);
	scanf("%d",&t);
	while(t--){
		fflush(stdout);
		scanf("%d",&n);
		int id=1;
		for(int i=2;i<=n;i++){
			if(bigger(i,id)==true){
				id=i;
			}
		}
		int id2=1;
		if(id==1){
			id2=2;
		}
		ret.clear();
		ret.insert(id2);
		for(int i=id2+1;i<=n;i++){
			if(i==id){
				continue;
			}
			char ans=act_or(i,id2,id);
			if(ans=='>'){
				id2=i;
				ret.clear();
				ret.insert(i);
			}else{
				if(ans=='='){
					ret.insert(i);
				}
			}
		}
		int id3=0;
		for(int i:ret){
			if(id3==0){
				id3=i;
			}else{
				if(bigger(i,id3)==false){
					id3=i;
				}
			}
		}
		printf("! %d %d\n",id-1,id3-1);
	}
	return 0;
}
char act_or(int a,int b,int k){
	printf("? %d %d %d %d\n",a-1,k-1,b-1,k-1);
	fflush(stdout);
	cin>>c;
	return c;
}
bool bigger(int a,int b){
	printf("? %d %d %d %d\n",a-1,a-1,b-1,b-1);
	fflush(stdout);
	cin>>c;
	if(c=='>'){
		return true;
	}
	return false;
}

注意:这里面数组下标是 0 base!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493498.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

phpspreadsheet导出Excel报错: Invalid numeric value for datatype Numeric

使用 phpspreadsheet 导出Excel的一段代码如下&#xff1a; $sheet->setCellValue($cellName[$kk] . ($key 2), $vv);如果某个字段值里面包含 换行符(\n) 会导致报错&#xff1a; Invalid numeric value for datatype Numeric解决办法&#xff1a; if (substr($vv, -1) …

低功耗、低成本 NAS 的可能性

使用现状&#xff1a;多台工作电脑&#xff0c;家里人手一台&#xff0c;还在两个住处 有好几台工作电脑&#xff0c;不同电脑有不同的用途&#xff0c;最大的问题就是各个电脑上文件的同步问题&#xff0c;这里当然就需要局域网里的公共文件夹&#xff0c;在NAS的问题上查了网…

【Java程序设计】【C00392】基于(JavaWeb)Springboot的校园生活服务平台(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园生活服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

如何压缩视频大小?3个很简单的方法~

有时候在网站上传视频时&#xff0c;最大限制上传大小为10M&#xff0c;可我要上传的视频体积有30M&#xff0c;这可怎么办呢&#xff1f;想必大家都遇到过类似的情景&#xff0c;或是为了节约磁盘、网盘的空间&#xff0c;方便文件传输发送等&#xff0c;如何压缩视频大小&…

LeetCode讲解算法2-数据结构[栈和队列](Python版)

文章目录 一、栈1.1 栈的定义1.2 栈的实现分析步骤1.3 栈的应用匹配圆括号匹配符号模2除法&#xff08;十进制转二进制&#xff09;进制转换 二、队列2.1 单向队列2.2 双端队列2.3 队列的应用验证回文串滑动窗口最大值 一、栈 1.1 栈的定义 栈是一种线性数据结构&#xff0c;栈…

maya导入导出bvh 自动 脚本

目录 maya打开脚本编辑器 运行打开bvh脚本 maya导出bvh脚本 maya打开脚本编辑器 打开Maya软件,点击右下角 “脚本编辑器” 运行打开bvh脚本<

一本书掌握数字化运维方法,构建数字化运维体系

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

【计算机考研】408到底有多难?

你真以为大家是学不会408吗&#xff1f; 不是&#xff01;单纯是因为时间不够&#xff01;&#xff01;&#xff01; 再准确一些就是不会分配时间 408的知识其实并不难&#xff0c;要说想上130那确实有难度&#xff0c;但是100在时间充裕的情况下还是可以做到的 我本人是双…

程序员如何兼职赚小钱?

程序员由于有技术和手艺其实兼职赚钱的路子还是挺多的&#xff0c;只要你有足够的时间。 1. 做外包 这是比较传统的方式&#xff0c;甲方在一些众包平台上发布开发任务&#xff0c;你可以抢这个任务&#xff0c;但是价格都比较便宜。 任务比较多的平台: 猪八戒、一品威客、开…

第5章 数据建模和设计

思维导图 5.1 引言 最常见的6种模式&#xff1a;关系模式、多维模式、面向对象模式、 事实模式、时间序列模式和NoSQL模式 每种模式分为三层模型&#xff1a;概念模型、逻辑模型和物理模型 每种模型都包含一系列组件&#xff1a;如实体、关系、事实、键和属性。 5.1.1 业务驱…

单页面应用部署到iis上可以正常打开,刷新就404

当您遇到Dumi打包的网站部署到IIS上可以正常打开首页,但刷新页面时出现404错误的情况,这通常与以下几个方面有关: 路由处理: Dumi生成的项目通常基于SPA(Single Page Application)架构,使用前端路由来实现无刷新导航。这意味着大部分页面切换是在浏览器层面完成的,而不…

嵌入式学习46——硬件相关2串口通信

串口&#xff1a; 端口&#xff1a; COM 波特率&#xff1a; 9600 115200 &#xff08;bps&#xff09; 每秒传输的数据…

35.HarmonyOS App(ArkUI)使用父组件@Builder装饰的方法初始化子组件@BuilderParam报错

HarmonyOS App(ArkUI)使用父组件Builder装饰的方法初始化子组件BuilderParam报错 Type void is not assignable to type () > void. <tsCheck> 去掉括号()就可以了 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中En…

使用LangChain、LangGraph和LangSmith来创建AI Agent

LangGraph LangGraph是建立在LangChain之上的一个框架&#xff0c;它使得创建和管理智能体&#xff08;Agent&#xff09;及其运行时环境变得更加简单。 在LangChain的架构中&#xff0c;智能体是指由语言模型控制的系统&#xff0c;它能够自主决策接下来要执行的操作。而智能…

js算法记录

> 更多请前往 https://www.passerma.com/article/86 滑动窗口 1 给定一个矩阵&#xff0c;包含N*M个整数&#xff0c;和一个包含K个整数的数组。现在要求在这个矩阵中找一个宽度最小的子矩阵&#xff0c;要求子矩阵包含数组中所有的整数 function minSubmatrixWidth(mat…

【Redis教程0x07】Redis持久化之AOF日志

引言 在【Redis教程0x06】中我们说到过&#xff0c;Redis的持久化有3种策略&#xff1a;RDB快照、AOF日志、RDB和AOF混合持久化。 本篇博客我们就将介绍一下AOF日志是怎么回事&#xff0c;以及混合持久化是怎么实现的。 AOF持久化 AOF日志 AOF是Append Only File的缩写&…

c语言知识点整理------基础c语言框架,数据类型,变量常量,注释

前言 本文不涉及讲解原理&#xff0c;用简洁明了的风格&#xff0c;去整理方便查阅的知识点。 &#xff08;适合有编程基础&#xff0c;或者需要作为笔记的人群使用&#xff09; 程序基本框架 结果会输出hello world。 程序的执行 c语言属于编译型语言。 代码执行分为五个…

阿里云服务器租用价格表-2024最新(附明细报价)

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

如何在家中使用手机平板电脑 公司iStoreOS软路由实现远程桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能&#xff0c;也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

el-select动态禁用

在一个el-form表单中有5个el-form-item; 每个el-form-item是一个el-select控件&#xff1b; 这5个el-select控件遵循这样的规则&#xff0c;都是使用同一个list集合&#xff0c;如果第一个el-select选择了list中的某一项&#xff0c;那么这一项就被禁用&#xff1b;其他的el-…