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

【每日一题】CF1680C. Binary String | 双指针 | 简单

题目内容

原题链接

给定一个长度为 n n n 01 01 01 字符串,对于一个子串 s u b sub sub ,子串内部的 0 0 0 的数量为 x x x ,子串以外的 1 1 1 的数量为 y y y ,子串的代价为 m a x ( x , y ) max(x, y) max(x,y) ,问代价最小是多少。

数据范围

  • 1 ≤ n ≤ 2 × 1 0 5 1\leq n \leq 2\times 10^5 1n2×105

题解

解法1

二分答案 m i d mid mid,枚举子串右端点,当 x ≥ y x\geq y xy ,则不停移动左端点。然后取 m a x max max 判断是否存在一个子串的代价小于等于 m i d mid mid

时间复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)

解法2

从二分答案中可以考虑到,枚举右端点,当 x ≥ y x\geq y xy ,就需要不停移动左端点,直到 x ≤ y x\leq y xy
这样就不需要二分答案了,只是一个双指针。

时间复杂度: O ( n ) O(n) O(n)

代码

#include <bits/stdc++.h>
using namespace std;void solve() {string s;cin >> s;int n = int(s.size());int all1 = 0;for (auto c: s) all1 += c == '1';int ans = n - all1;int in0 = 0, out1 = all1;for (int r = 0, l = 0; r < n; ++r) {int v = s[r] - '0';if (v == 0) in0 += 1;else out1 -= 1;while (l <= r && in0 > out1) {v = s[l] - '0';if (v == 0) in0 -= 1;else out1 += 1;l += 1;}ans = min(ans, max(in0, out1));}cout << ans << "\n";
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;while (T--) solve();return 0;
}
http://www.lryc.cn/news/188705.html

相关文章:

  • 10.selenium进阶
  • 【安全】 Java 过滤器 解决存储型xss攻击问题
  • 一、Excel VBA 是个啥?
  • Spring Boot读取配置文件
  • spark集群环境下,实现人口平均年龄计算
  • [羊城杯 2020]black cat - 文件隐写+RCE(hash_hmac绕过)
  • 智能文件管理助手,轻松实现按数量平均分类文件,高效整理新文件夹!
  • 安卓 Android 终端接入阿里云 IoT 物联网平台
  • 2023自动化测试面试题(含答案)
  • 使用 Apache Camel 和 Quarkus 的微服务(一)
  • 如何通过高级流量管理提高 Kubernetes 的弹性
  • 解决Springboot集成RabbitMQ不自动生成队列的问题
  • 【数据结构】Decreasing String—CF1886C
  • 【广州华锐互动】钢厂铸锻部VR沉浸式实训系统
  • Python中执行SQL报错unsupported format character ‘Y‘ (0x59) at index 34
  • 云数据库(林子雨慕课课程)
  • 2023-10-10 python-从一组颜色中找到与指定颜色最接近的颜色-{K-D树}-记录
  • 使用C++实现DNS欺骗攻击
  • C#WPF属性元素语法应用实例
  • el-select应用虚拟列表,避免过多数据导致浏览器卡死
  • ES6之函数的扩展
  • 【PPT制作】基础篇
  • 尚硅谷CSS学习笔记
  • MYSQL的日志管理
  • 微信小程序在TS模板下引入TDesign组件
  • alsa pcm接口之pcm设备的状态STATE
  • 【UE】在游戏运行时,通过选择uasset来生成静态网格体
  • vue中PC端使用高德地图 -- 实现搜索定位、地址标记、弹窗显示定位详情
  • 服务器数据恢复-DS5300存储raid5硬盘出现坏道离线的数据恢复案例
  • K8S存储总结持久化存储解决方案(以NFS为例)