Finding OR Sum

news/2025/3/13 1:02:32/文章来源:https://www.cnblogs.com/PeachyGalaxy/p/18768990

Finding OR Sum

题目大意

有两个非负整数 \(x\)\(y\) ,不知道具体数值,但是有两次机会输入一个\(n\),会返回 \((n|x)+(n|y)\),两次过后,要输出 \(!\),并且会输入一个 \(m\),你要输出 \((m|x)+(m|y)\)

思路

由于只有两次机会,所以可以考虑分别得出 x 和 y 奇数位和偶数位的性质

  • 第一次输入的n考虑奇数位的性质,所以它的偶数位需要都为1,这样才能体现x和y偶数位的性质

  • 同理,第二次输入的n考虑偶数位的性质,所以它的奇数位需要都为1

该如何得出性质 ?

首先要清除返回的数据中ji或者ou对它的影响

以奇数位为例

因为返回的是 \((n+x)|(n+y)\) ,所以需要 h -= ji + ji;清除影响

  • 如果返回的数据的偶数位为1,说明这个后一位的奇数位x和y都是1

    • b010 和 b010 得到的就是 b100
  • 如果返回的数据的奇数位为1,说明这一位上一个为0,一个为1

    • b010 和 b000 得到的就是 b010
  • 如果返回的数据奇数位为1, 说明这一位上都为0

    • b100 和 b000 得到的就是 b100

偶数位同理

这样就能推断出x和y的每一位情况,最后直接与m或再相加就能得到答案

代码

// Problem: E. Finding OR Sum
// Contest: Codeforces - Codeforces Round 1008 (Div. 2)
// URL: https://codeforces.com/contest/2078/problem/E
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
#include <unordered_map>
#include <map>
#include <vector>
#include <cstring>
#include <bitset>
#include <set>using namespace std;
using ll = long long;
int ji, ou;int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}
int lcm(int a, int b) {return a / gcd(a, b) * b;}void solve()
{int x = 0, y = 0, h = 0;//奇数位cout << ji << endl;cin >> h;h -= ji + ji; //得到x和y在奇数位的具体数值,去掉ji的影响for(int i = 0; i < 31; i++) {if(h & (1 << i)) {if(i & 1) x |= (1 << i); //将x的第i位设为1else {x |= (1 << (i - 1)); //h在偶数位上为1,则是x和y的i-1位都为1y |= (1 << (i - 1));}}}//偶数位cout << ou << endl;cin >> h;h -= ou + ou;for(int i = 0; i < 31; i++) {if(h & (1 << i)) {if(i & 1) {x |= (1 << (i - 1));y |= (1 << (i - 1));}else x |= (1 << i);}}cout << '!' << endl;int m; cin >> m;cout << (m | x) + (m | y) << endl;
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int t; cin >> t;//int t = 1;for(int i = 0; i < 30; i++) {if(i & 1) ou |= (1 << i); //奇数位都是1,用来确定偶数位else ji |= (1 << i); //偶数位都是1,用来确定奇数位}while (t--) solve();
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

师联星

一、团队介绍 1.1 团队概况 1.1.1 博客展示链接 团队名,组长博客链接https://www.cnblogs.com/nurali1508 1.1.2 团队项目描述 师联星——方便大学生家教的辅助软件 1.1.3 队员风采 努尔艾力 风格:有趣 擅长的技术: 编程的兴趣:安静 希望的软工角色:发言和统计 一句话宣言…

【程设の旅】魔兽世界 Part4:终极

写完还是挺累的 主要是那个憨憨四万三千行的数据包 调的人有点晕 而且里面还有三个憨憨四舍五入 搞得人晕乎乎 最后这三个数据只能打表 唉 放代码吧 感觉类与对象封装还是不敢用 等后面自己做个QT项目练一练咯 #include<bits/stdc++.h> #define ll long long using names…

[AIGC/ALM] 增强语言模型(ALM)之综述

1 简介最近Meta发表了一篇图灵奖得主Yann LeCun参与的关于“Augmented Language Models: a Survey/增强语言模型:一篇调查”的综述,系统归纳了语言模型的推理能力以及使用外部工具能力的工作(推理指将复杂任务分解为更简单的子任务,工具包括调用模块等 ),并指出这个方向有可…

Vue3 icon使用

icon使用:https://cn.element-plus.org/zh-CN/component/icon.html 1.安装icon2.配置main.js点击查看代码 import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.cssimport App from ./App.vue import router from ./routerim…

第一周实验:已有程序二次开发

一. 来源 代码来源于室友大一期末大作业。该程序模拟实现了一个简易的图书管理系统,功能有用户注册登录,查询,购买书籍,管理员对书籍的增删改查功能。 二.程序原来的代码及运行结果 运行环境:Windows 11 + Visual Studio 2022点击查看代码 #include<iostream> #incl…

知识点系列——基础数据结构

1.1 链表 洛谷-P1996 约瑟夫问题我就直接模拟void solve() {cin>>n>>k;int id=0;for(int i=1;i<=n;i++){int p=0;while(p<k){bool f=false;while(vis[id]){id++;f=1;if(id>n)id=1;}if(!f){id++;if(id>n)id=1;while(vis[id]){id++;if(id>n)id=1;}}p+…

Laravel11 从0开发 Swoole-Reverb 扩展包(七) - 发布laravel-swoole-reverb

开篇 这一篇,我做了过度,因为正好也完成第一个版本的laravel swoole reverb服务。因此,先做个🧐,我们后面还会继续分享整个实现流程。 关于laravel-swoole-reverb laravel-swoole-reverb是一个将 Swoole 与 Laravel Reverb 集成的包,采用php8.2版本编写,可用于高性能的…

TinyWebServer全解

项目地址 原理合集 把链接都放在这里,可以一次看个爽 epoll main 首先是main函数: #include "config.h"int main(int argc, char *argv[]) {//需要修改的数据库信息,登录名,密码,库名string user = "ct";string passwd = "123456";string data…

推送数据解决

自动批量提交的介绍 在线URL链接自动批量提交工具介绍链接提交工具是网站主动向百度搜索推送数据的工具,本工具可缩短爬虫发现网站链接时间,网站时效性内容建议使用链接提交工具,实时向搜索推送数据。本工具可加快爬虫抓取速度,无法解决网站内容是否收录问题URL链接自动批量…

常用的base.css文件

一、常用的base.css文件(也是比较简略的,但按需增加)body,ul,li,ol,dl,dd,h1,h2,h3,h4,h5,h6,input,p{ margin:0;} ul,ol { padding:0;} img { border:none;} .clear{zoom:1;} .clear:after{display:block; content:"";clear:both; visibility:hidden; height:0;}…

Easysearch 磁盘水位线注意事项

Easyearch 为了防止索引将磁盘空间完全占满,使用磁盘水位线进行磁盘空间控制。具体来说有三条磁盘水位线:low、high、flood。 低水位线 通过参数 cluster.routing.allocation.disk.watermark.low 进行设置,默认值 85%。也可设置成一个具体值,比如:400mb,代表须保留 400mb…

最好的百度提交每日自动提交工具【免费】

原文链接 JavaGuide最好的百度提交每日自动提交工具【免费】github https://github.com/nogeek-cn/baidu-seo-auto-push-dailygitee https://gitee.com/nogeek-cn/baidu-seo-auto-push-daily本工具比别的工具好的地方【免费:你只需要在你的网站中添加我的网站友链,我就可以帮…