Visio流程图与DeepSeek-OCR-2协同:图形文档智能化方案

核心内容摘要

【GitHub项目推荐--Antfarm:一键构建OpenClaw AI代理团队的智能工作流引擎】⭐⭐⭐
Gemma-3-270m网络安全应用:恶意文本检测系统构建

【计算机网络】《计算机网络》核心知识点全解

先看题目题目分析我们有一个长度为的二进制字符串包含字符0和1至少有一个1。

可以交换相邻字符每次交换算一次操作。

目标让所有1连续排列形成一段连续的1。

求最少操作次数思路分析关键观察最终1聚集到连续的一段但我们可以自由选择这个连续段的位置。

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

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

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

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

转化为数学模型假设最终1的连续段是从位置 k 到位置 km−1其中 m 是1的个数。

设原字符串中1的位置下标从 1 开始是p1,p2,…,pm最终连续段的位置是k,k1,…,km−1那么把第 j 个1从 pj​ 移动到 kj−1 需要的交换次数就是总操作次数为我们要选择一个整数 k 使得这个和最小。

化简令 qjpj−(j−

那么上式变成其中 qj​ 是已知的常数因为 pj​ 已知。

所以问题转化为已知数组 q1,q2,…,qm找一个整数 k 使最小。

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

因此先找出所有1的位置 p1,p2,…,pm。

计算 qjpj−(j−

对 q 数组排序取中位数。

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

正解#include bits/stdc.h using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(

; int n; string s; cin n s; // 收集所有1的位置 vectorint pos; for (int i 0; i n; i) { if (s[i]

{ pos.push_back(i

; // 转成1-based } } int cnt pos.size(); // 1的个数 // 计算q数组 vectorlong long q(cnt); for (int i 0; i cnt; i) { q[i] pos[i] - i; // 公式推导q_j p_j - (j-

在代码中简化为 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; }全剧终

无风险9.1免费版安装正式版下载最新版V19.1.9-无风险9.1免费版安装正式版下载最新版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123