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

U654615 比特聚集(bit)补题报告

先看题目:

题目分析

我们有一个长度为的二进制字符串,包含字符'0''1',至少有一个'1'
可以交换相邻字符,每次交换算一次操作。
目标:让所有'1'连续排列(形成一段连续的'1')。
求最少操作次数

思路分析

关键观察

  1. 最终'1'聚集到连续的一段,但我们可以自由选择这个连续段的位置。

  2. 我们只关心'1'的相对位置变化,不关心'0'的具体分布(除了它们会占用位置)。

  3. 交换相邻字符,相当于把一个'1'向左或向右移动一位。

  4. 把所有的'1'聚集到一起,等价于把每个'1'移动到某个中心位置附近。

  5. 这其实是一个经典问题:最小化所有'1'移动到连续位置的总交换次数。

转化为数学模型

假设最终'1'的连续段是从位置 k 到位置 k+m−1,其中 m 是'1'的个数。
设原字符串中'1'的位置(下标从 1 开始)是:

p1,p2,…,pm

最终连续段的位置是:

k,k+1,…,k+m−1

那么把第 j 个'1'从 pj​ 移动到 k+j−1 需要的交换次数就是:

总操作次数为:

我们要选择一个整数 k 使得这个和最小。

化简

令 qj=pj−(j−1),那么上式变成:

其中 qj​ 是已知的常数(因为 pj​ 已知)。

所以问题转化为:

已知数组 q1,q2,…,qm,找一个整数 k 使最小。

这是经典问题:最小绝对偏差和,当 k 取 q 的中位数时,和最小。

因此:

  • 先找出所有'1'的位置 p1,p2,…,pm。

  • 计算 qj=pj−(j−1)。

  • 对 q 数组排序,取中位数

  • 计算,这就是最小操作次数。

正解:

#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; string s; cin >> n >> s; // 收集所有1的位置 vector<int> pos; for (int i = 0; i < n; i++) { if (s[i] == '1') { pos.push_back(i + 1); // 转成1-based } } int cnt = pos.size(); // 1的个数 // 计算q数组 vector<long long> q(cnt); for (int i = 0; i < cnt; i++) { q[i] = pos[i] - i; // 公式推导:q_j = p_j - (j-1) 在代码中简化为 pos[i] - i } // 排序取中位数 sort(q.begin(), q.end()); long long mid = q[cnt / 2]; // 计算总距离 long long ans = 0; for (auto x : q) { ans += abs(x - mid); } cout << ans << endl; return 0; }


全剧终

http://www.jsqmd.com/news/330960/

相关文章:

  • 虚拟机需要连外网,同时笔记本连接wlan,IP经常变,该怎么配置网络?
  • 计算机毕业设计 | SpringBoot+vue高校迎新系统 新生报道高校宣传招生平台(附源码)
  • QTCreator error: C3861: “_mm_loadu_si64”: 找不到标识符
  • java: lambda表达式(极简解释)(自用)
  • 实用指南:RabbitMQ 在拼团系统中的应用:延迟队列、订单超时与消息幂等
  • SpringBoot基础配置拓展配置类+拦截器
  • VS2015安装后,安装QT59,之后安装qt-vsaddin-msvc2015-2.4.3.vsix 文件失败问题!
  • 2026年 精馏塔/蒸馏塔/回收设备厂家推荐榜单:NMP、DMF、DMAC专业精馏回用与蒸发设备技术实力深度解析
  • 零基础博客园皮肤美化攻略 - LI,Yi
  • 可撤销并查集,可持久化并查集
  • 金融时间序列预测全流程框架:从SHAP特征选择到智能算法优化深度学习预测模型,核心三章实验已完成,尚未发表,期待有缘人!
  • 输入旅游目的地,自动查询当地风俗禁忌,物价参考,反诈提醒,生成境外/外地出行安全指南。
  • 详细介绍:goldenLayout布局
  • 03.课程:06.Nginx的官方简介~
  • 04
  • 全文查AI率降AI率完整教程:从45%降到8%的实战方法
  • Eclipse 关闭项目详解
  • Google 地图叠加层:功能、应用与未来展望
  • 美团二面挂了!问 “用户积分系统怎么设计”,我答 “加个字段存总数”,面试官:积分过期你怎么算?
  • C 语言中的结构体
  • Qwen3-VL-0.6B?Reyes轻量化折腾:一个从0到1开始训练的0.6B参数量的多模态大模型
  • 计算机基础·cs336·MoE
  • Docker Desktop 在国内使用的囧境:镜像拉取失败、加速器失效与破局之道
  • UnityNFE(NetcodeForEntities)入门手记
  • 笔记04:价值链深度游:追踪一包纸巾的“数字一生”
  • 交直流混合微网 程序matlab 采用拉丁超立方抽样和多场景缩减,考虑风光等随机性建模,利用粒...
  • P4113 [HEOI2012] 采花 题解
  • 笔记01:当IT系统“雪崩”,没有一片生意雪花是无辜的
  • CSS3 多媒体查询实例
  • 实测微信立减金回收平台,京顺回收高效变现