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

思维+构造,CF 1936A - Bitwise Operation Wizard

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

1936A - Bitwise Operation Wizard


二、解题报告

1、思路分析

考虑 假设 n - 1 的 二进制位长为 b,我们能构造 2^b - 1 吗?

显然可以

假如我们最终要得到 p[a] ^ p[b] = 2^b - 1

我们在 O(3N) 内找到 一个比较特殊的 <a, b> 的下标吗?

query(x, x, y, y) 支持我们比较 x, y 的大小

那么:

我们显然可以在 O(N) 内找到 n - 1

对于 n - 1 而言,我们又可以 O(N) 找到 所有 满足 n - 1 | x = 2^b - 1 的 x 的下标

O(N)选出的这些值里面的最小值 mi,它一定满足 mi ^ n - 1 = 2^b - 1

2、复杂度

时间复杂度: O(3(N - 1))空间复杂度:O(N)

3、代码详解

 ​
#include <bits/stdc++.h>// #define DEBUGusing u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;constexpr int inf32 = 1E9 + 7;
constexpr i64 inf64 = 1E18 + 7;const int P = 1'000'000'007;char query(int a, int b, int c, int d) {std::cout << "? " << a << ' ' << b << ' ' << c << ' ' << d << std::endl;char res;std::cin >> res;return res;
}void solve() {int n;std::cin >> n;int mai = 0;for (int i = 1; i < n; ++ i) {if (query(mai, mai, i, i) == '<') {mai = i;}}std::vector<int> vj{0};int maj = 0;for (int i = 1; i < n; ++ i) {char res = query(maj, mai, i, mai);if (res == '<') {maj = i;vj.clear();vj.push_back(maj);} else if(res == '=') {vj.push_back(i);}}int mij = vj[0];for (int i = 1; i < vj.size(); ++ i) {if (query(mij, mij, vj[i], vj[i]) == '>') {mij = vj[i];}}std::cout << "! " << mai << ' ' << mij << std::endl;
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);#ifdef DEBUGint cur = clock();freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifint t = 1;std::cin >> t;while (t--) {solve();}
#ifdef DEBUGstd::cerr << "run-time: " << clock() - cur << '\n';
#endifreturn 0;
}


http://www.mrgr.cn/news/53684.html

相关文章:

  • 多功能纤维上线,大脑肠道 “无线畅聊” 不是梦
  • 哈希表的模拟实现
  • 多一DY4100数字式接地电阻测试仪使用测量方法
  • SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
  • Linux之实战命令45:swapon应用实例(七十九)
  • CSV文件自动化生成:用Pandas与Datetime高效处理商品信息
  • 【AI实战连载01】揭秘ComfyUI AI换装工作流方法1-OOTDiffusion!电商卖家用AI一键给模特换装?
  • 数据分析题面试题系列2
  • 【开源免费】基于SpringBoot+Vue.JS社区团购系统(JAVA毕业设计)
  • 【思维导图】C语言—常见概念
  • 06 P1706 全排列问题
  • Diffusion Mechanism in Residual Neural Network: Theory and Applications
  • 【C++刷题】力扣-#268-丢失的数字
  • 你是否真的弄懂了 OAuth 2.0?
  • 【C++篇】类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
  • 从头预训练一只迷你 LLaMA 3_llama3 预训练预处理
  • 电影评论网站开发:Spring Boot技术指南
  • 人工智能研究创造出新型蛋白质
  • Redis数据持久化机制详解
  • 中国商飞社招校招前程无忧智鼎题库:IQCAT思维能力测验真题通关技巧
  • linux卸载数据库(最为完整的卸载方式)
  • RabbitMQ如何保证消息不丢失?
  • FFmpeg源码:av_sat_add64_c、av_sat_sub64_c函数分析
  • 外星人木乃伊---我的收藏
  • 《月光下的约定》
  • CVTE Android面试题及参考答案(100道题)