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

构造+位运算,CF 1901C - Add, Divide and Floor

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

1901C - Add, Divide and Floor


二、解题报告

1、思路分析

我们假设将原数组排序,那么每次操作不会改变数组单调性

当 最大值 调整等于 最小值时 所有数都相等,因为单调性不变,比最小值大的数过程中都始终 >= 最小值

我们考虑每次操作的影响,设最大值为ma,最小值为mi

假如 ma 和 mi 都是 偶数

那么 (ma + x) / 2 - (mi + x) / 2 = (ma - mi) / 2

也就是说,我们的差值变为原来一半

我们可以枚举ma mi 奇偶的4种情况,我们发现我们通过调整 x 的取值可以使得每次差值都减少为原来一半,由于操作限制每次除2,故不会有比这更优的操作了

更具体地,当最小值为奇数,我们取x = 1,偶数取x = 0

具体为什么通过举具体例子可得,当然也可以更一般性地推导,这里略

2、复杂度

时间复杂度: O(N + logU)空间复杂度:O(1)

3、代码详解

 ​
#include <bits/stdc++.h>
#define sc scanf
using i64 = long long;
using PII = std::pair<int, int>;
constexpr int inf32 = 1e9 + 7;
constexpr i64 inf64 = 1e18 + 7;
constexpr int P = 998244353;// #define DEBUGvoid solve()
{int n;std::cin >> n;int mi = inf32, ma = -inf32;for (int i = 0, a; i < n; ++ i) {std::cin >> a;mi = std::min(mi, a);ma = std::max(ma, a);}if (mi == ma) {std::cout << 0 << '\n';return;}std::vector<int> ans;while (mi != ma) {ans.push_back(mi & 1);mi = (mi + ans.back()) / 2;ma = (ma + ans.back()) / 2;}if (ans.size() <= n) {std::cout << ans.size() << '\n';for (int i = 0; i < ans.size(); ++ i)std::cout << ans[i] << " \n"[i + 1 == ans.size()];}else std::cout << ans.size() << '\n';
}int main()
{
#ifdef DEBUGfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifstd::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);int _ = 1;std::cin >> _;while (_--)solve();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mac M1安装换脸Roop教程及所遇到的问题
  • 微信小程序:多图片显示及图片点击放大,多视频显示
  • git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)
  • milvus的批量向量搜索
  • 数模·插值和拟合算法
  • 【Zotero插件】Zotero Tag为文献设置阅读状态 win11下相关设置
  • 上海市计算机学会竞赛平台2022年9月月赛丙组二叉树的遍历
  • 【JavaScript】 JS 的单线程和浏览器的多进程架构
  • PHP常量
  • 图灵测试:人工智能与人类沟通的界限
  • UniVue@v1.5.0版本发布:里程碑版本
  • linux学习笔记整理: 关于linux:nginx服务器 2024/7/20;
  • Ubuntu Grub引导优化
  • 基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)
  • Flowable-SpringBoot项目集成
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • echarts花样作死的坑
  • eclipse(luna)创建web工程
  • js对象的深浅拷贝
  • Laravel Telescope:优雅的应用调试工具
  • Promise面试题,控制异步流程
  • Python学习之路13-记分
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 浮现式设计
  • 聊一聊前端的监控
  • 深入浅出Node.js
  • 世界上最简单的无等待算法(getAndIncrement)
  • 为视图添加丝滑的水波纹
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​Python 3 新特性:类型注解
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ###STL(标准模板库)
  • (1)STL算法之遍历容器
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Java入门)抽象类,接口,内部类
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (分布式缓存)Redis分片集群
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (四)汇编语言——简单程序
  • (一)RocketMQ初步认识
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net 高效开发之不可错过的实用工具
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net--CLS,CTS,CLI,BCL,FCL