首页 > 其他分享 >SDOI2024(二进制思想好题)

SDOI2024(二进制思想好题)

时间:2024-08-23 10:41:41浏览次数:13  
标签:return 奇数 二进制 SDOI2024 好题 这题 int 只有

link.
我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙我草这题只有橙。
考场上想的分解质因数直接偏离航线了……
记录一下正确做法。
我们发现每次遇到奇数就会犹豫,所以我们应该尽可能降低奇数的出现次数,体现在二进制上就是为 \(1\) 的位尽可能的少
偶数的情况我们当然不用考虑,这里考虑奇数的时候到底是加 \(1\) 还是减 \(1\)。
我们考虑加 \(1\) 会发生什么,答案是将一个二进制奇数末尾连续的一串 \(1\) 变成 \(0\),并且将最低位的一个 \(0\) 变 \(1\)。
减一只会把末位的 \(1\) 变成 \(0\)。
这是不难发现当且仅当这个数末位只有一个连续的 \(1\) 时减优于加。
首先充分性很好证,口胡一下必要性。
如果末尾的连续的 \(1\) 大于等于 \(2\) 个时,加 \(1\) 会至少减少 \(2\) 个 \(1\),另外制造一个 \(1\) 出来,所以至少减少一个 \(1\),但是减 \(1\) 顶多减少一个 \(1\),得证。
可以采取记忆化搜索的方式降低复杂度。

#define int long long
unordered_map < int ,int > m ; // m[a] 表示有 a 只猫猫的最少犹豫次数 
int t ;
inline int out (int x) {
	if (x == 0) {
		return m[0] = 0 ;
	} 
	if (x == 1) {
		return m[1] = 1 ;
	}
    // 0/1 可以直接特判
	if (m.find (x) != m.end ()) {
		return m[x] ;
	} // 记搜
	if (x & 1) { // 奇数
		int a = x + 1 >> 1 ,b = x - 1 >> 1 ; // a/b 表示加/减 1
		return out ((x & 3) == 3 ? a : b) + 1 ; // 注意 3 的二进制是 11,要是 &3=3 说明末尾至少有两个连续的 1,别忘了把犹豫次数加 1
	}
	return out (x >> 1) ;
}

标签:return,奇数,二进制,SDOI2024,好题,这题,int,只有
From: https://www.cnblogs.com/Tomoyuki-Mizuyama/p/18375475

相关文章

  • 题解:P10892 SDOI2024
    题解:P10892SDOI2024题目传送门题目思路通过阅读题面,我们可以看出,其实对于每一次纠结,如果交出了\(\frac{n-1}{2}\)只猫猫,则剩下的为\(\frac{n+1}{2}\)只猫猫;如果交出了\(\frac{n+1}{2}\)只猫猫,则剩下的为\(\frac{n-1}{2}\)只猫猫。为了使纠结的次数尽可能小,我们要交出......
  • P10892 SDOI2024 题解
    【题意简述】你有一个数字\(n\),每次操作将\(n/2\),如果\(n\)是一个奇数,你会纠结是向上取整还是向下取整。问你最少纠结多少次。多组数据。【思路】为了方便起见,我们在二进制下重新审视这个题目:在二进制下,一个数除以\(2\)等同于右移一位。默认向下取整,因为右移会舍弃......
  • 信息学奥赛初赛天天练-71-NOIP2016普及组-基础题2-进制转换、二进制转八进制、八进制
    NOIP2016普及组基础题24以下不是CPU生产厂商的是()AIntelBAMDCMicrosoftDIBM8与二进制小数0.1相等的八进制数是()A0.8B0.4C0.2D0.19以下是32位机器和64位机器的区别是()A显示器不同B硬盘大小不同C寻址......
  • 14 生成特定二进制数字环的程序实现:确保所有可能子序列唯一
    下图是由2^3个二进制数字组成的环,由3个二进制数字构成的2^3种不同的数字序列恰好在该环中分别出现一次,例如:从箭头位置开始按顺时针方向每三个连续的二进制数字构成的序列各不相同,它们所代表的十进制数依次是:0,1,2,5,3,7,6,4.编写一个完整程序,该程序对于输入的正整数n,生成由2^n个二......
  • mysql 二进制日志总结
    常用sql语句查看二进制日志文件位置SHOWVARIABLESLIKE'log_bin_basename';查看二进制日志文件的索引文件位置SHOWVARIABLESLIKE'log_bin_index';查看二进制日志文件的过期天数SHOWVARIABLESLIKE'expire_logs_days';//取值范围0-99默认0关闭列出MySQL......
  • 信息学奥赛初赛天天练-70-NOIP2016普及组-基础题1-二进制、二进制状态表示、二进制加
    NOIP2016普及组基础题11以下不是微软公司出品的软件是()APowerpointBWordCExcelDAcrobatReader2如果256种颜色用二进制编码来表示,至少需要()位A6B7C8D93以下不属于无线通信技术的是()A蓝牙BWifiCGPRSD以太网7......
  • 二进制下载部署Nginx
    一、通过Nginx官网并采取二进制方式部署Nginx官网二、具体步骤[[email protected]]#ll-dnginx.repo-rw-r--r--.1rootroot398Aug1722:01nginx.repo[[email protected]]#pwd/etc/yum.repos.d接下来可以直接使用yum-yinstallnginx则是直......
  • P10660 BZOJ2759 一个动态树好题 题解
    从题目名字看出此题需要用动态树解决对于任意\(i\),都有唯一的\(p_i\)与之对应,由\(p_i\)向\(i\)连边,\(n\)种关系显然构成一基环树森林。对于环上的节点,一个点可以自己表示自己,所以可以直接解出该点的权值,其他点从环上的点直接推出即可。考虑如何动态维护这个过程,一个点上......
  • 揭开虚拟与现实的帷幕:二进制世界与道
    本章将带领读者进入一个结合科学与哲学的思维世界,从一个全新的视角探讨二进制世界的概念,结合超弦理论和老子的“道”哲学,深入理解计算机底层的运行原理及其与宇宙本质的联系。通过回顾经典电影《黑客帝国》以及最新的人工智能发展,我们将探讨世界是否是一个经过精心编程的虚拟现实......
  • Ropdump:针对二进制可执行文件的安全检测工具
    关于RopdumpRopdump是一款针对二进制可执行文件的安全检测工具,该工具基于纯Python开发,是一个命令行工具,旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。功能介绍1、识别二进制可执行文件中的潜在ROP小工具。2......