首页 > 其他分享 >CF1188D Make Equal

CF1188D Make Equal

时间:2023-08-15 19:13:07浏览次数:34  
标签:cnt Make 个数 Equal tot CF1188D 考虑 进位 位为

题目大意

给出 \(n\) 个数字 \(a_1,a_2,\dots,a_n\),每次操作可以给其中一个数加上 \(2\) 的非负整数次幂。求最少的操作次数,使得这 \(n\) 个数相等。

思路

记 \(b_i = \max\limits_{1 \leq k \leq n}{a_k} - a_i\),这道题的目的是求一个值 \(x\) 使得

\[\sum_{i=1}^n \operatorname{popcount}(x + b_i) \]

最小,其中 \(\operatorname{popcount}(x)\) 表示数 \(x\) 在二进制下 \(1\) 的个数。

考虑 DP。

考虑二进制下 \(x + b_i\) 的第 \(k\) 位,发现这一位的决策与下面这些有关:

  • \(x\) 的第 \(k\) 位是否填 \(1\);
  • \(b_i\) 的第 \(k\) 位是否为 \(1\);
  • 第 \(k-1\) 位是否进位。

其中,\(x\) 是我们要决策的,\(b_i\) 是已知的,考虑第三种情况。

如果直接进行记录的话很明显要爆炸。但我们发现,第 \(k-1\) 位的进位情况与 \(b_i \mod 2^k\) 有关。

\(b_i \mod 2^k\) 的值越大,就更加容易进位,如果将 \(b_i\) 按照 \(b_i \mod 2^k\) 的值从大到小排序,能产生进位的数一定是 \(b_i\) 的一段前缀。

设 \(dp_{i,j}\) 表示有 \(j\) 个数进位到第 \(i\) 位的最优解(最小操作次数)。

考虑转移,对于第 \(i\) 位,我们要考虑 \(b_k\) 在二进制下第 \(i\) 位是否为 \(1\) 和在第 \(i-1\) 位进位的数的个数。

钦定第 \(i - 1\) 位有 \(j\) 个数进位,记 \(tot\) 为当前这一位为 \(1\) 的 \(b_k\) 的个数;\(cnt\) 为前 \(j\) 个数中当前这一位为 \(1\) 的数的个数。

考虑下面四种情况,表示满足前面两句条件的数有多少个:

  1. \(x+b_k\) 在第 \(i-1\) 位没有进位,\(b_k\) 的第 \(i\) 位为 \(1\),有 \(tot-cnt\) 个;
  2. \(x+b_k\) 在第 \(i-1\) 位没有进位,\(b_k\) 的第 \(i\) 位为 \(0\),有 \(n-j-(tot-cnt)\) 个;
  3. \(x+b_k\) 在第 \(i-1\) 位有进位,\(b_k\) 的第 \(i\) 位为 \(1\),有 \(cnt\) 个;
  4. \(x+b_k\) 在第 \(i-1\) 位有进位,\(b_k\) 的第 \(i\) 位为 \(0\),有 \(j-cnt\) 个。

那么考虑第 \(i\) 位的决策:

  • 如果 \(x\) 取 \(0\),那么第 \(3\) 种产生进位,第 \(1,4\) 种的 \(x+b_k\) 的第 \(i\) 位为 \(1\),产生贡献;
  • 如果 \(x\) 取 \(1\),那么第 \(1,3,4\) 种产生进位,第 \(2,3\) 种的 \(x+b_k\) 的第 \(i\) 位为 \(1\),产生贡献;

然后就可以进行转移。

标签:cnt,Make,个数,Equal,tot,CF1188D,考虑,进位,位为
From: https://www.cnblogs.com/baijian0212/p/solution-cf1188d.html

相关文章

  • 服务器数据恢复-EqualLogic存储RAID5硬盘坏道导致存储崩溃的数据恢复案例
    服务器数据恢复环境:一台DELLEqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。存储存放虚拟机文件,采用VMFS文件系统,划分了4个lun。服务器故障&检测&分析:存储设备上有两个硬盘指示灯显示黄色,存储不可用。存储设备已经过保。对故障存储中的16块硬盘做硬件故障检测,发现其中......
  • CMakeLists语法详解
     https://www.jianshu.com/p/eb25baf5ca19set(Root"${CMAKE_CURRENT_SOURCE_DIR}")set(Base64${Root}/lib/libb64/src)include_directories(${OpenCV_INCLUDE_DIRS})include_directories(${Root})include_directories(${Root}/lib/libb64/include) include_dir......
  • Git:Vscode提交报错Make sure you configure your "user.name" and "user.email" in gi
    使用VScode编辑代码后,Push到云端报错:Makesureyouconfigureyour"user.name"and"user.email"ingit解决步骤:1.进入本地端的文件夹,右键GitBash; 2.输入命令:$gitconfig--globaluser.name"your_username"#配置用户名$gitconfig--globaluser.email&qu......
  • VSCode C++开发环境配置:CMake 调试配置 launch.json
    相关内容VSCodeC++开发环境配置:LLVMclangclangd安装cmakesudoaptinstallcmake安装VSCode插件CMakeCMakeTools编写CMakeLists.txtproject(hello)cmake_minimum_required(VERSION3.15.0)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_EXTENSIONSOFF)add......
  • How to compare two linked lists are equal in Python All In One
    HowtocomparetwolinkedlistsareequalinPythonAllInOne在Python中如何比较两个链表是否相等#Definitionforsingly-linkedlist.fromtypingimportOptionalclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=......
  • linux下Makefile学习
    概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix......
  • pacemaker使用fence_sbd
    AdministrativeProceduresforRHELHighAvailabilityclusters-EnablingsbdfencinginRHEL7and8-RedHatCustomerPortal启动watchdog每个server执行modprobesoftdogmodprobesoftdogcat/etc/sysconfig/modules/softdog.modulesmodprobesoftdogchmod7......
  • Django 标签未注册解决办法 Invalid block tag on line 9: 'ifequal'. Did you forget
     这是一个常见问题,但不要担心!一旦您了解了导致模板标记错误的原因,无论是拼写错误、语法还是忘记加载库,就可以轻松修复它。Django中的标签是什么?Django中的标签为Django模板添加了特殊功能,允许您在模板中执行操作。例如,使用标签,您可以以特定格式显示数据、循环访问上下文......
  • pytest---hooks获取到用例执行结果(pytest_runtest_makereport )
    前言自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过pytest中的hooks来进行获取吗,其中pytest中存在多个hooks的函数,小编今天先简单介绍其中一种,通过pytest_runtest_makereport 获取自动化测试用例的执行情况获取用例结果pytest_runtest_......
  • makefile 编译错误 — make: No rule to make target
    #makefile编译错误—make:Noruletomaketarget 最近使用make编译引用静态库,结果出现标题所示完整错误类似为:make:***Noruletomaketarget/xxx/xxx/xxxx/xxxxx/xxx.cpp(or.h)',neededbyxxx_xxx.o’.Stop. 原因分析:进入xxx_xxx.o.d所记录的xxx.cpp路径......