bzoj4236JOIOJI

题意:

给一个只由JOI三个字母组成的串,求最长的一个子串使其中JOI三个字母出现次数相等。串长度≤200000

题解:

有点像bzoj4384,因此推算的过程是差不多的,但还是有不同因为本题要求的是出现次数相等,而那题要求的是不等:

cnt[1][i]-cnt[1][j]==cnt[2][i]-cnt[2][j],cnt[2][i]-cnt[2][j]==cnt[3][i]-cnt[3][j],cnt[1][i]-cnt[1][j]==cnt[3][i]-cnt[3][j]

化简得到cnt[1][i]-cnt[2][i]==cnt[1][j]-cnt[2][j],cnt[2][i]-cnt[3][i]==cnt[2][j]-cnt[3][j],cnt[1][i]-cnt[3][i]==cnt[1][j]-cnt[3][j](本式实际上是冗余的因为可由前两式相加得到)

故可以用一个map维护二元组<cnt[1][i]-cnt[2][i],cnt[2][i]-cnt[3][i]>的最早出现次数i,每次在map中查找键值中有没有和当前元素的<cnt[1]-cnt[2],cnt[2]-cnt[3]>相等的元素,有的话和答案比较,否则插入map。

代码:

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#define maxn 200100
#define inc(i,j,k) for(int i=j;i<=k;i++)
using namespace std; int a,b,c,d,e,n,ans; char s[maxn];
map<pair<int,int>,int>m;
int main(){
scanf("%d%s",&n,s+); m[make_pair(,)]=;
inc(i,,n){
if(s[i]=='J')a++; if(s[i]=='O')b++; if(s[i]=='I')c++; d=a-b; e=b-c;
if(m.find(make_pair(d,e))==m.end())m[make_pair(d,e)]=i;
else ans=max(ans,i-m[make_pair(d,e)]);
}
printf("%d",ans); return ;
}

20160814

bzoj4236JOIOJI的更多相关文章

随机推荐

  1. (二)POI-创建一个sheet页,并添加行列数据

    原文:https://blog.csdn.net/class157/article/details/92800439 1.只创建sheet页 package com.java.poi; import ...

  2. 动作函数-web_submit_data

    web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", &q ...

  3. 拒绝降权!教你用 Python 确保制作的短视频独一无二

    1. 场景 前段时间有人私信我,说自己辛辛苦苦剪辑的短视频,上传到某平台后,由于播放量太大,收到 降权 的通知,直接导致这个账号废掉了! 其实,各大视频平台都有自己的一套鉴别算法,针对视频的二次创作, ...

  4. Beta冲刺总结随笔

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 WeChair 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 如下 其他参考文献 项目预期 ...

  5. 谈谈spring-boot-starter-data-redis序列化

    在上一篇中springboot 2.X 集成redis中提到了在spring-boot-starter-data-redis中使用JdkSerializationRedisSerializerl来实现 ...

  6. 从Spring Initializr开始

    出识springcloud我们这里需要建立两个项目 来感受下微服务 一.配置服务 1. Spring Initializr. 用idea自带的 Spring Initializr. 建立第一个项目 2 ...

  7. 31_栈的分类.swf

    栈的分类: 栈可以分为静态栈和动态栈 静态栈:要删除先删除4才能删除3,以数组为数据结构 动态栈:以链表作为数据结构,在实际中使用动态栈比较多

  8. SSH网上商城一

    Java高级项目之SSH网上商城项目实战: 1.采用目前最主流的三大框架开发即Struts2+Spring+Hibernate框架整合开发.2.通过AJAX技术提供良好的用户体验.3.提供了邮箱激活的 ...

  9. ant+jmeter+jenkins接口自动化测试一

    [Jmeter篇]jmeter+Ant+Jenkins接口自动化测试集成(一) 橙子探索测试发表于橙子探索测试订阅 90 一.简介 1.什么是ant? ant是构建工具,把代码从某个地方拿来,编译,再 ...

  10. PHPstudy 2018 集成环境项目配置虚拟域名访问

    1.首先启动PHPstudy2018,并停止它 2.点击“其他选项菜单->站点域名管理” 3.设置站点域名.项目目录,点击“新增”,再点击“保存并生成配置文件” 4.生产配置文件之后会重启,然后 ...