bzoj4236 JOIJOI
Description
Input
Output
计算出在长度为i的前缀中J,O,I分别出现的次数t1[i],t2[i],t3[i]
[l+1,r]符合要求等价于t1[r]-t1[l]=t2[r]-t2[l]=t3[r]-t3[l]
即t1[r]-t2[r]=t1[l]-t2[l],且t1[r]-t3[r]=t1[l]-t3[l]
从左到右扫描字符串并把 (t1[i]-t2[i],t1[i]-t3[i]) → i 插入一个hashmap中,顺便判断以i结尾的最长合法长度
#include<cstdio>
#define N 200002
#define P 501257
typedef unsigned int U;
int n;
U t1[N],t2[N],t3[N];
char s[N];
U h1[P],h2[P],h3[P];
bool d[P];
int ans=;
inline void ins(U a,U b,U x){
U w=(a*+b*+)%P;
while(d[w]){
if(h1[w]==a&&h2[w]==b){
int v=x-h3[w];
if(v>ans)ans=v;
return;
}
w+=;
if(w>=P)w-=P;
}
h1[w]=a;h2[w]=b;h3[w]=x;d[w]=;
}
int main(){
scanf("%d%s",&n,s+);
for(int i=;i<=n;i++){
char c=s[i];
t1[i]=t1[i-]+(c=='J');
t2[i]=t2[i-]+(c=='O');
t3[i]=t3[i-]+(c=='I');
}
for(int i=;i<=n;i++)ins(t1[i]-t2[i],t1[i]-t3[i],i);
printf("%d",ans);
return ;
}

bzoj4236 JOIJOI的更多相关文章
- 【BZOJ4236】JOIOJI STL
[BZOJ4236]JOIOJI Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJ ...
- BZOJ4236 JOIOJI 【map】
BZOJ4236 JOIOJI Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI ...
- bzoj4236 JOIOJI hash 模拟
JOIOJI桑是JOI君的叔叔."JOIOJI"这个名字是由"J.O.I"三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的 ...
- [bzoj4236]JOIOJI
来自FallDream的博客,未经允许,请勿转载,谢谢. JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJ ...
- BZOJ4236:JOIOJI(乱搞)
Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由 ...
- 【BZOJ4236】JOIOJI [DP]
JOIOJI Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description JOIOJI桑是JOI君的叔叔 ...
- 【bzoj4236】JOIOJI STL-map
题目描述 JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由“J.O.I” ...
- bzoj usaco 金组水题题解(1)
UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...
随机推荐
- Arithmometer: A Node.js implementation
Foreword: This project is a part of pair programming task. We implement an command-line based arithm ...
- 201621123010《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- 漂亮的各种弹出框 sweet alert
Sweet Alert 是一个替代传统的 Alert 的提示效果.SweetAlert 自动居中对齐在页面中央,不管您使用的是台式电脑,手机或平板电脑看起来效果都很棒. 还带下拉 几种 动画效果 弹窗 ...
- 建立自己的Servlet--成功
1--用记事本新建一个servlet程序,文件名为HelloWorld.java,文件内容如下: import java.io.*; import javax.servlet.*; import ja ...
- js中的转换方法
1.var colors =['red','blue','green']; console.log(colors.toString()); // red,blue,green 总结:toString( ...
- Vue.js更改调试地址端口号
Vue项目一般使用自带的脚手架工具vue-cli和webpack打包方式进行项目构建运行.开发中,我们在控制台输入命令行npm run dev部署项目后,默认开启的页面调试地址是8080端口.但是有时 ...
- Home Kit框架简介
重要:本文是针对开发过程中使用的API或者技术的初步文档.苹果提供该文档旨在为开发者使用该技术和苹果产品上的编程接口提供帮助.这些信息可能会发生变化,依据该文档开发的软件应该使用最新的操作系统软件和最 ...
- 【图文教程】win7+VMware8.0+CentOS6.4 NAT上网
在win7下面安装VM8.0,里面又安装多个虚拟机,各个虚拟机之间可以互相访问,同时虚拟机可以直接访问外网上网,win7要ping通个虚拟机中的系统.这种方式就使用NAT模式,开启VMware Net ...
- HihoCoder - 1794:拼三角形 (状压DP)
描述 给定 n 根木棍,第 i 根长度为 ai 现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断 请你求出最多能拼出几个 输入 第一行一个正整数 n 第二行 n ...
- Spring MVC 学习)——控制器与@RequestMapping详解
Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解 一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求 ...