题目描述
小P马上就要来到程序设计大赛的现场、上了,他希望能够AK这次比赛,所以他找到了一个字符串。
这个字符串长度为n,由A和K组成。这个字符串被小p称为AK串。小P任意截取一个区间s,使得这个区间从左往右或从右往左在读取子串的过程中,子串中字母K的个数始终不小于A的个数。小p希望知道能够截取区间s的最大长度。
如果小p得到了这个区间的最大长度,那么他就会得到一个AK 这次比赛的秘籍,请你帮助他得到这个区间的最大长度。
输入
第一行一个整数n (n<=106),接下来一个长度为n的只含有A,K的字符串
输出
一个整数,区间的最大长度
样例输入 Copy
6
AKAKKA
样例输出 Copy
4
提示
样例解释
取出区间为KAKK 对于30%数据,N<=2000。
对于另外10%数据,a或者k其中一个仅出现一次。
对于全部数据 N<=10^6。

 

错误代码:

//筛选法?  AK
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=;
string str;
int book[];
int b[];
int main()
{
memset(book,,sizeof(book));
memset(b,,sizeof(b));
int n,x=,y=,j,i,tmp=;
cin>>n;
cin>>str;
str=' '+str;
// cout<<str.length()<<endl;
// for(i=1;i<=n;i++) cout<<book[i]<<" ";
for(i=;i<=n;i++){//y>x
if(str[i]=='A') x++;
else y++;
if(y<x) {
book[i]=;
x=;
y=;}
else {
book[i]=book[i-]+;
// cout<<"i="<<i<<endl;
}
}
x=;
y=;
for(i=n;i>=;i--){//y>x
if(str[i]=='A') x++;
else y++;
if(y<x) {
b[i]=;
x=;
y=;}
else {
b[i]=b[i+]+;
// cout<<"i="<<i<<endl;
}
}
for(i=;i<=n;i++) {
if(book[i]&&b[i]) tmp=max(tmp,max(b[i],book[i]));
}
cout<<tmp<<endl; }

AC代码:

#include<bits/stdc++.h>

using namespace std;

int main(){
int n;
cin>>n;
string str;
cin>>str;
int i=,j=;//[i,j]
int a=,k=;
int ans=;
while(){
while(j<str.size()&&k>=a){
if(str[j]=='A')a++;
if(str[j]=='K')k++;
j++;
if(k>=a){
int cnt=;
for(int r=j-;r>=i;r--){
if(str[r]=='A')cnt--;
if(str[r]=='K')cnt++;
if(cnt<)break;
}
if(cnt>=)ans=max(ans,j-i);
}
}
if(k>=a)break;
while(i<j && k<a){
if(str[i]=='A')a--;
if(str[i]=='K')k--;
i++;
}
}
cout<<ans<<endl;
return ;
}

分析:

小P的秘籍的更多相关文章

  1. 这是一篇满载真诚的微信小程序开发干货

    1月9日零点刚过,张小龙与团队正式发布微信小程序.它究竟能在微信8.5亿用户中牵动多少人,现在还很难说.但对于创业者来讲,小程序无疑带来了新契机,以及服务“上帝”们的新方式. 从今天起,只要开发者登录 ...

  2. 用Gitolite 构建 Git 服务器

    转载 Gitolite 构建 Git 服务器 作者: 北京群英汇信息技术有限公司 网址: http://www.ossxp.com/ 版本: 0.1-1 日期: 2010-10-07 14:52:19 ...

  3. Gitolite 构建 Git 服务器

    Gitolite 构建 Git 服务器 Gitolite 构建 Git 服务器作者: 北京群英汇信息技术有限公司网址: http://www.ossxp.com/版本: 0.1-1日期: 2010-1 ...

  4. 微信小程序性能测试之jmeter踩坑秘籍(前言)

    最近要做个微信小程序的性能压测,虽然之前只做过web端的,但想一想都是压后端的接口,所以果断答应了下来,之前对jmeter都是小打小闹,所以趁着这次机会好好摆弄摆弄. ---------------- ...

  5. 小齐读者拿到快手、百度、网易等 offer 的独门秘籍!

    小齐说: 这篇文章来自读者冰红茶,他刚结束了秋招,拿了很多家 offer. 和他聊完之后,我觉得他的备考思路也完全适用于美国的面试,只是分值要调整一下,但是具体每一块的内容,地球村通用.所以分享给大家 ...

  6. 男同胞爱小秘籍--作为爱他的女朋友了几天C规划

    各位男同胞,不知道你的女朋友没有在过去的一问天,你这个问题~~ 场景重现: 女友:"今天天气不错." 你们:"对" 女友:"今天是我们知道它的最初几天 ...

  7. 打造H5里的“3D全景漫游”秘籍

    近来风生水起的VR虚拟现实技术,抽空想起年初完成的“星球计划”项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍. QQ物联与深圳市天文台合作,在手Q“发现新设备”-“公共设备”里,连 ...

  8. 屠龙之路_击败DB小boss_FifthDay

    摘要:服务器大魔王被击败的消息传到了恶龙boss那里,恶龙大怒派出了自己的首级大将DB人称小boss,但小boss的名号并没有吓到七位屠龙勇士,经过他们齐心协力的进攻,最终击败了DB,小boss临死前 ...

  9. zero to one:创业秘籍并不存在,因为任何创新都是新颖独特的,任何权威都不可能具体规定如何创新

    彼得·蒂尔(Peter Thiel)的新作<从0到1>从预售开始就占据美国亚马逊排行榜第一名的位置,被一批创业家和企业家评为“迄今为止最好的商业书”.这是一本关于如何创建创新公司的书,主要 ...

随机推荐

  1. socket网络编程之不间断通信

    socket是python提供的一种网络通信方式. socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...

  2. Windows Server 2016-管理Active Directory复制任务

    Repadmin.exe可帮助管理员诊断运行Microsoft Windows操作系统的域控制器之间的Active Directory复制问题. Repadmin.exe内置于Windows Serv ...

  3. Tomcat优化配置

    1.环境: 系统:Windows.Linux Tomcat版本:9 2.编码与性能调优 server.xml文件: <Connector port="8080" connec ...

  4. cURL模拟POST提交数据

    首先,是这个代码: <?php //curl模拟post提交数据$url = "http://127.0.0.1/immoc/output.php";$post_data = ...

  5. Sublime Text 2 配置PHP调试环境(在windows环境下)

    1:PHP安装,配置环境变量 PHP安装略过- 2:下载Sublime Text 2 下载地址:http://www.sublimetext.com/2 ,选择自己合适的版本 3:点击 sublime ...

  6. Unity 琐碎(4) 可视化辅助调试Giamos

    Gizmos 类 可以在代码中绘制一些输出结果或者中间输出内容,比如计算后的包围盒等等 类变量 方法 作用 color 控制输出颜色 matrix Set the gizmo matrix used ...

  7. C语言 用π/4=1-1/3+1/5-1/7+... 求π的近似值

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> #include<math.h> void m ...

  8. 卸载安装node npm (Mac linux )

    1. 卸载node npm (1) 先卸载 npm: sudo npm uninstall npm -g (2) 然后卸载 Node.js. (2.1) 如果是 Ubuntu 系统并使用 apt-ge ...

  9. 使用Docker在本地搭建Hadoop分布式集群

    学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟 ...

  10. input reset 重置时间

    经验规律,301毫秒. function autoFormatMoney() { if (!this.value.length) {return} var num = parseFloat(this. ...