[题解]Crazy Binary String-前缀和(2019牛客多校第三场B题)
题目链接:https://ac.nowcoder.com/acm/contest/883/B
题意:
给你一段长度为n,且只有 ‘0’ 和 ‘1’ 组成的字符串 a[0,...,n-1]。求子串中 ‘0’ 和 ‘1’ 数目相等的最大长度,子序列中 ‘0’ 和 ‘1’ 数目相等的最大长度。
思路:
子序列的最大长度很容易想到,就是 ‘0’ 和 ‘1’ 的数量中最小的两倍
求子串的最大长度就用前缀和
将 ‘1’ 的价值设为1,‘0’ 的价值设为-1,用数组 cnt[i] 记录从 0 到 i 的前缀和,再用数组 pos[i] 记录前缀和为 i 时的位置
可知当 cnt[j] = cnt[i] (j > i)时,子串 a[i+1,....,j] 中的 ‘0’ 和 ‘1’ 数量相等,则更新 ans=max(ans,j-pos[cnt[j]])
当时想了好久,才明白要用前缀和来求子串的最大长度,自己太菜qaq
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int pos[],cnt[];
int main()
{
int n,m,t,x=,y=,ans1=,ans2;
cin>>n;
string a;
cin>>a;
cnt[]=;//设初始价值为100000,否则可能出现负数,数组越界
for(int i=;i<=n;i++){
if(a[i-]=='')
cnt[i]=cnt[i-]-,x++;
else
cnt[i]=cnt[i-]+,y++;
if(pos[cnt[i]]==&&cnt[i]!=)//更新pos
pos[cnt[i]]=i;
else
ans1=max(ans1,i-pos[cnt[i]]);//如果pos[cnt[i]]不为0,则可得到一段符合要求的字串
}
ans2=min(x,y)*;
cout<<ans1<<" "<<ans2<<endl;
return ;
}
[题解]Crazy Binary String-前缀和(2019牛客多校第三场B题)的更多相关文章
- [题解]Magic Line-计算几何(2019牛客多校第三场H题)
题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意: 给你偶数个点的坐标,找出一条直线将这n个点分成数量相等的两部分 并在这条直线上取不同的两个点,表示 ...
- [题解]Shorten IPv6 Address-模拟(2019牛客多校第六场B题)
题目链接:https://ac.nowcoder.com/acm/contest/886/B 题意: 您将获得一个IPv6地址,该地址是128位二进制字符串.请根据以下规则确定其最短的表示: 以十六进 ...
- 启发式分治:2019牛客多校第三场 G题 Removing Stones
问题可以转换为求有多少个区间数字的总和除2向下取整大于等于最大值.或者解释为有多少个区间数字的总和大于等于最大值的两倍(但是若区间数字总和为奇数,需要算作减1) 启发式分治: 首先按最大值位置分治,遍 ...
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...
- 2019牛客多校第三场B-Crazy Binary String(前缀和+思维)
Crazy Binary String 题目传送门 解题思路 把1记为1,把0记为-1,然后求前缀和,前缀和相等的就说明中间的01数一样.只要记录前缀和数值出现的位置即可更新出答案. 代码如下 #in ...
- 2019牛客多校第三场B Crazy Binary String 思维
Crazy Binary String 思维 题意 给出01串,给出定义:一个串里面0和1的个数相同,求 满足定义的最长子序列和子串 分析 子序列好求,就是0 1个数,字串需要思考一下.实在没有思路可 ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
- 2019 牛客多校第三场 B Crazy Binary String
题目链接:https://ac.nowcoder.com/acm/contest/883/B 题目大意 给定一个长度为 N 的 01 字符串,输出最长子串和子序列的长度,满足其中 0 和 1 的个 ...
- 2019牛客多校第三场F Planting Trees(单调队列)题解
题意: 求最大矩阵面积,要求矩阵内数字满足\(max - min < m\) 思路: 枚举上下长度,在枚举的时候可以求出每一列的最大最小值\(cmax,cmin\),这样问题就变成了求一行数,要 ...
随机推荐
- java Semaphore信号灯
Semaphore实现的功能就类似2个公用电话,假如有10个人要打电话:那么只能2个人占有电话,8个需要等待.当2个人中 的任何一个人让开后,其中等待的另外8个人中又有一个人可以使用了等待的8个人中可 ...
- Java稀疏数组
一.概述 1.概念 2.处理方法 3.示例 原数组如下: 转换为稀疏数组如下: 二.代码 1.主方法 @Testpublic void SparseTest() { // 创建一个原始的二维数组 11 ...
- [HDU 1529]Cashier Employment(差分约束系统)
[HDU 1529]Cashier Employment(差分约束系统) 题面 有一个超市,在24小时对员工都有一定需求量,表示为\(r_i\),意思为在i这个时间至少要有i个员工,现在有n个员工来应 ...
- [暑假集训Day4T3]曲线
三分模板. 三分法求单峰函数最优值,之后每次取所有二次函数最优值即可 #pragma GCC optimize(3,"Ofast","inline") #inc ...
- Java并发编程:Concurrent锁机制解析
Java并发编程:Concurrent锁机制解析 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: # ...
- TCL环境检查
set w [open 1.txt w+] foreach a [info var] { if { [llength [array name $a]]==0 } { puts $w $a:[set $ ...
- web笔记全
1.项目流程与数据库 1.课程体系 阶段1(服务器开发): 项目导入/数据库/JS基础/NodeJS 阶段2(前端核心技术): HTML/AJAX/CSS/bootstrap 阶段3(前端进阶技术): ...
- 使用EntityFramework调用存储过程并获取存储过程返回的结果集
[实习]刚入职,公司要求完成两个任务,任务要求使用存储过程和事务,其中一个问题要获取存储过程的查询结果集.经过多方查找和自己的实践,终于找到了方法.这里记录一下. 看到的这篇文章中给出的例子是查询单个 ...
- spring启动图案修改(纯属好玩)
在resource目录下新建banner.txt(与application.properties或者application.yml同级) 在里面随便写自己的汉字图案就行了,比如我的: _ooOoo_ ...
- PeStudio读取pe信息
https://blog.csdn.net/x_xx_xxx_xxxx/article/details/79867928 PeStudio 主要利用此界面工具 https://blog.csdn.n ...