2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列
https://ac.nowcoder.com/acm/contest/883/B
首先先把0所在的位置变-1,1所在位置变1,然后统计一个前缀和,用sum[i]表示。
那么如果从起点开始的话只要满足条件的子串那么sum[i]的值就是0
如果子串起点不为0,那么只要以前出现过sum[i]的值,这两个值之间的串就一定是合法的子串。
例如:
标号:1 2 3 4 5
数值:0 0 1 1 0
sum:-1 -2 -1 0 -1
i==4的时候sum[i]==0,所以1-5间合法,长度是4
而sum[1]==sum[3]==sum[5]==-1,所以第一次出现-1的位置是1,而最后出现的位置是5,所以其中长度5-1=4也是一个合法的区间子串。
子序列就很简单了,只要求0,1的个数取最小数量乘2
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
const int inf = 0x3f3f3f3f;
int dir[][]={{,},{,},{,},{,-},{-,},{-,-},{,-},{-,}};
#define pi acos(-1)
#define ls rt<<1
#define rs rt<<1|1
#define me0(s) memset(s,0,sizeof(s))
#define me1(s) memset(s,1,sizeof(s))
#define mef(s) memset(s,-1,sizeof(s))
#define meinf(s) memset(s,inf,sizeof(s))
const int N=;
int sum[N],t[N];
inline int read() {
char c=getchar(); int x=, f=;
while(c<''|c>'') {if(c=='-') f=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*f;
}
ll exgcd(ll a,ll b){
if(b==) return a;
exgcd(b,a%b);
}
ll q_pow(ll a,ll b,ll mod){
ll anss=;
while(b){
if(b&) anss=anss*a%mod;
a=a*a%mod;
b>>=;
}
return anss;
}
ll q_mul(ll a,ll b,ll mod){
ll anss=;
while(b){
if(b&) anss=(anss+a)%mod;
a=(a+a)%mod;
b>>=;
}
return anss;
}
int main(int argc, char * argv[])
{
std::ios::sync_with_stdio(false);
int n,l2=,y2=,ans2,v[N];
mef(v);
char s[N];
cin>>n;
cin>>s+;
int len=strlen(s+);
for(int i=;i<=len;i++){
if(s[i]==''){
t[i]=;
y2++;
}
else{
t[i]=-;
l2++;
}
}
sum[]=t[];
map<int,int>m;
m[sum[]]=;
int maxn=;
for(int i=;i<=len;i++){
sum[i]=sum[i-]+t[i]; //算出sum
if(m[sum[i]]!=) maxn=max(maxn,i-m[sum[i]]);//如果出现过以前的sum值,则当前的位置减第一次的位置
else m[sum[i]]=i;//否则记录第一个出现的sum值的位置
if(sum[i]==) maxn=max(maxn,i);//为0表示前面所有的01相等
// cout<<sum[i]<<" "<<m[sum[i]]<<endl;
}
ans2=*(l2>y2?y2:l2);
cout<<maxn<<" "<<ans2<<endl;
return ;
}
2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列的更多相关文章
- 2019牛客暑期多校赛(第一场) A Equivalent Prefixes(单调栈)
传送门:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个数组a和b,求最大的p,满足在区间 [1,p] 中任何区间的两个数组的最小值的下标都相等. 思 ...
- 2019牛客暑期多校训练营(第三场)H题目
题意:给你一个N×N的矩阵,求最大的子矩阵 满足子矩阵中最大值和最小值之差小于等于m. 思路:这题是求满足条件的最大子矩阵,毫无疑问要遍历所有矩阵,并判断矩阵是某满足这个条件,那么我们大致只要解决两个 ...
- 2019牛客暑期多校训练营(第三场)- F Planting Trees
题目链接:https://ac.nowcoder.com/acm/contest/883/F 题意:给定n×n的矩阵,求最大子矩阵使得子矩阵中最大值和最小值的差值<=M. 思路:先看数据大小,注 ...
- 2019牛客暑期多校训练营(第三场) F.Planting Trees(单调队列)
题意:给你一个n*n的高度矩阵 要你找到里面最大的矩阵且最大的高度差不能超过m 思路:我们首先枚举上下右边界,然后我们可以用单调队列维护一个最左的边界 然后计算最大值 时间复杂度为O(n*n*n) # ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
随机推荐
- Interesting HDU - 5785 回文树
题意: 找出所有[i,j]为回文串[j+1,k]也为回文串的i*k乘积之和. 题解: 设sum1[i] 为正着插入,到 i 的所有回文串的起始位置的前缀和,sum2[i] 表示反正插入的前缀和 ans ...
- Springboot整合dubbo搭建基本的消费、提供和负载均衡
文章目录 1.确定接口 2.创建提供者 2.1 pom配置 2.2dubbo配置文件 2.3 application.properties 2.4 mybatis相关 2.4.1 配置UserMapp ...
- java Future && Guava Future
### java future Runnable的任务是没有返回值,也不能抛出异常的java.util.concurrent.Callable接口,可以返回一个对象或者抛出异常 使用jdk的这种方式提 ...
- Spark三种部署方式
- (转)Google Protocol Buffer 的使用和原理
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 简介 什么是 Google Protocol Buffer? ...
- JS去重算法
1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: var arr=[2,8,5, ...
- 记一次付工解决Sqlserver问题的过程
问题:Sqlserver连接不上 1 检查自身 Sqlserve服务是否开启 Windows服务是否开启 2 用CMD尝试连接Sqlserver 显示详细错误 由于文件不可访问,或者内存或磁盘空间不 ...
- leetcode-219-存在重复元素②
题目描述: 第一次提交:超时 class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool ...
- 【JZOJ6354】最短路(tiring)
description analysis 显然边权有变化规律\(x,{1\over{x-1}},{x-1\over x},x,...\) 于是把一个点拆成三个点,分别表示步数到除\(3\)余\(0,1 ...
- 如何检测 Web 服务请求丢失问题
导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...