BZOJ 4236: JOIOJI
Description
给出一个字符串,只包含3个字母,询问最长的一个子串,3个字母出现次数相同.
Sol
map.
如果一个子串满足条件,那么它端点处的三个字母的个数两两差值都是一样的,直接存个状态强行上map.
注意要加入一个初始状态.
Code
#include<cstdio>
#include<map>
#include<iostream>
using namespace std; const int N = 200005; struct S{ int a[3]; }g[N];
bool operator < (const S &x,const S &y){ return x.a[0]==y.a[0] ? (x.a[1] == y.a[1] ? x.a[2] < y.a[2] : x.a[1] < y.a[1]) : x.a[0] < y.a[0]; }
int n,ans,s[N];
map<S,int> mp; inline int idx(char ch){ if(ch == 'J') return 0;else if(ch == 'O') return 1;else return 2; }
int main(){
scanf("%d",&n);
char ch=getchar();while(ch>'Z' || ch<'A') ch=getchar();
for(int i=1;i<=n;i++) s[i]=idx(ch),ch=getchar(),g[i]=g[i-1],g[i].a[s[i]]++;
S tmp;tmp.a[0]=tmp.a[1]=tmp.a[2]=0;
mp[tmp]=0;
for(int i=1;i<=n;i++){
S tmp;
tmp.a[0] = g[i].a[0]-g[i].a[1],tmp.a[1] = g[i].a[0]-g[i].a[2],tmp.a[2] = g[i].a[1]-g[i].a[2];
if(mp.count(tmp)) ans=max(ans,i-mp[tmp]);
else mp[tmp]=i;
}return cout<<ans<<endl,0;
}
BZOJ 4236: JOIOJI的更多相关文章
- BZOJ 4236: JOIOJI MAP
4236: JOIOJI Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.ph ...
- BZOJ 4236 JOIOJI(前缀和)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4236 [题目大意] 给出一个只包含三种字母的字符串,求出三种字母数量相等的最长子串 [ ...
- BZOJ 4236 "JOIOJI"(前缀和+map+pair)
传送门: [1]:BZOJ [2]:洛谷 •题解 定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和: 要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R] ...
- BZOJ 4236: JOIOJI map瞎搞
分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...
- bzoj 4236: JOIOJI【前缀和+map】
设sj,so,si分别是J O I的个数前缀和,然后要求求最长(l,r)满足sj[r]-sj[l-1]==so[r]-so[l-1]==si[r]-si[l-1],化简一下就是满足so[r]-so[l ...
- BZOJ 4236~4247 题解
BZOJ 4236 JOIOJI f[i][0..2]表示前i个字符中′J′/′O′/′I′的个数 将二元组<f[i][0]−f[i][1],f[i][1]−f[i][2]>扔进map,记 ...
- BZOJ 4236 set乱搞
思路: 取个差 在set里面找 更新 (这个用map更好吧 但是我不会--) //By SiriusRen #include <set> #include <cstdio> # ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
随机推荐
- jsp action中附件下载的写法
//一些主要的包和类 import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java ...
- 9月12日JavaScript脚本语言
JS脚本语言 JS脚本语言全称JavaScript,是网页里面使用的脚本语言,也是一门非常强大的语言. 一.基础语法 1.注释语法 单行注释:// 多行注释:/**/ 2.输出语法 ①alert(信息 ...
- Django笔记-字符编码相关问题整理
1.添加中文注释后编译出错,提示:Non-ASCII 解决方法: 在Python脚本文件的第一行或第二行添加一句: #coding:gbk或#coding:utf-8或##-*- cod ...
- MySQL注入
SQL Injection Tutorial by Marezzi (MySQL) SQL注入教程由Marezzi(MySQL的) In this tutorial i will describe h ...
- javascript生成二维码
参考: http://www.w3dev.cn/article/20140617/javascript-create-QR-code.aspx
- 浅谈JavaScript中的正则表达式
引言 对于正则表达式我想作为程序员肯定使用过它,那天书般的表达方式,我用一次就记住它了.这篇博客先介绍一些正则表达式的内容,然后介绍JavaScript中对正则表达式特有的改进.下面开始介绍正则表达式 ...
- mysql]一次主从数据不一致的问题解决过程()
问题 要解决问题就是怎么对比不一致,然后在不影响业务的情况下,修复数据不一致的问题,把从库缺少的数据补上 下面是能想到和找到的几个方案 1 从新从0开始同步,虽然对主库的使用没有影响,但是那么大的数据 ...
- VisualStudio基本使用(2)-使用VS2013来编译C语言程序
切换到C语言程序所有目录,执行cl test.c
- CF467 AB 水题
Codeforces Round #267 (Div. 2) (C和D的题解单独写:CF467C George and Job (DP) CF467D Fedor and Essay 建图DFS) C ...
- 使用python标准库urllib2访问网页
#访问不需要登录的网页import urllib2target_page_url='http://10.224.110.118/myweb/view.jsp' f = urllib2.urlopen( ...