| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C. Binary String(二分)C. Rooks Defenders(set + 二分) -> 正文阅读 |
|
[C++知识库]C. Binary String(二分)C. Rooks Defenders(set + 二分) |
Binary String 题意: 给定一个01字符串,从头删任意个字符,从末尾删任意个字符,问max(剩下的0的数量,删除的1的数量)最小是多少 思路: 首先想到,枚举留下的字符串区间 [ l, r ] ,?对于每个l,枚举r利用前缀和与后缀和求出枚举区间剩下的0的数量和删除的1的数量,求最小, 很显然这样会超时,考虑如何优化,仔细观察可以看出,在枚举r的过程中,如果此时 剩下的0的数量>删除的1的数量,那么我们此时的r如果再向右扩展的话,剩下的0的数量只可能增加,删除的1的数量只可能减少,那么答案显然就不是最优的了,反之,如果此时 剩下的0的数量>删除的1的数量,r向左扩展答案也不是最优的。因此,根据这一性质对于每个 l 我们二分查找最优的r 注意二分写法 AC代码
Rooks Defenders 题意; 有一个n*n的矩阵,q次询问,询问有三种类型, 1, 在(x1,y1) 处放置车(保证此前无车), 2,撤销(x1,y1)处的车 (保证此前有车) 3, 若对于每一个(x,y)都被攻击到则输出Yes,否则输出No(其中?x1 < = x <= x2 , y1 <= y <= y2 )? (车可以攻击同行同列的网格) 题解:首先想到对于要判断的子矩阵,若所有的行都被攻击或所有的列都被攻击,则所以的网格都被攻击完,反之则没有, 考虑如何优化,设置两个set集合别存未被攻击到的行和列,然后二分查找第一个大于x1的s1,若 s1 > x2?则说明 x1 - x2之间的行都会被攻击到,列也是如此 AC代码
注意: 不加?std::ios::sync_with_stdio(false); std::cin.tie(nullptr);? 用 cin 会超时... ???????????? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:17:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |