分别记录J,O,I,的个数

cnt[char][i] 表示处理到第i位,char的个数

显然当且仅当

  cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1]  &&  cnt[O][i] - cnt[I][i] == cnt[O][j-1] - cnt[I][j-1] 时

i到j位是一个长为i-j+1的合法串

于是把状态压到一个 long long 里 map瞎搞就行

没去掉调试输出导致WA了四次QAQ

#include<cstdio>
#include<iostream>
#include<map>
#define R register int
using namespace std;
map<long long,int>mp;
int n,ans,cnt[];
inline int fx(char ch) { if(ch=='J') return ; if(ch=='O') return ; if(ch=='I') return ;}
signed main() {
register char ch;
scanf("%d",&n); R nn=n;
mp[]=-;
while(!isalpha(ch=getchar()));
do { --n;
++cnt[fx(ch)]; //cout<<ch<<" "<<fx(ch)<<endl;
R pos=mp[(cnt[]-cnt[])*+cnt[]-cnt[]+];
if(!pos) mp[(cnt[]-cnt[])*+cnt[]-cnt[]+]=nn-n;//,cout<<nn-n<<endl;
else ans=max(ans,nn-n-pos+(pos==-?-:));//,cout<<"aaasskk:"<<ans<<endl; cout<<"ans:"<<ans<<endl;
//cout<<cnt[0]<<" "<<cnt[1]<<" "<<cnt[2]<<" "<<(cnt[0]-cnt[1])*800000+cnt[1]-cnt[2]+1000000000000000<<endl;
//cout<<mp[(cnt[0]-cnt[1])*800000+cnt[1]-cnt[2]]<<endl;
} while(n>=&&isalpha(ch=getchar()));
//cout<<"^^^^^^"
printf("%d\n",ans);
}

2019.04.05

BZOJ 4236: JOIOJI map瞎搞的更多相关文章

  1. BZOJ 4236: JOIOJI MAP

    4236: JOIOJI Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.ph ...

  2. TOJ3097: 单词后缀 (字典树 or map瞎搞)

    传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...

  3. 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 ...

  4. BZOJ 4236 "JOIOJI"(前缀和+map+pair)

    传送门: [1]:BZOJ [2]:洛谷 •题解 定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和: 要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R] ...

  5. BZOJ 4236 JOIOJI(前缀和)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4236 [题目大意] 给出一个只包含三种字母的字符串,求出三种字母数量相等的最长子串 [ ...

  6. BZOJ 4236: JOIOJI

    Description 给出一个字符串,只包含3个字母,询问最长的一个子串,3个字母出现次数相同. Sol map. 如果一个子串满足条件,那么它端点处的三个字母的个数两两差值都是一样的,直接存个状态 ...

  7. bzoj 2456: mode【瞎搞】

    这题加个#include都会MLE-- 神思路,每个数抵消宇哥和它不同的数,最后剩下的就是众数 #include<cstdio> int n,la,x,tot; int main() { ...

  8. 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,记 ...

  9. Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞

    Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...

随机推荐

  1. ubuntu 14.4 下 普通sudo无密码

    用户是test,要设置为 sudo无密码 visudo 最后一行 加上: %test  ALL=NOPASSWD:ALL 然后  ctrl + x 进行保存,会提示 Y or  N,输入 y 即可. ...

  2. 使用同一个目的port的p2p协议传输的tcp流特征相似度计算

    结论: (1)使用同一个目的port的p2p协议传输的tcp流特征相似度高达99%.如果他们是cc通信,那么应该都算在一起,反之就都不是cc通信流. (2)使用不同目的端口的p2p协议传输的tcp流相 ...

  3. 基于深度学习的安卓恶意应用检测----------android manfest.xml + run time opcode, use 深度置信网络(DBN)

    基于深度学习的安卓恶意应用检测 from:http://www.xml-data.org/JSJYY/2017-6-1650.htm 苏志达, 祝跃飞, 刘龙     摘要: 针对传统安卓恶意程序检测 ...

  4. form 提交数据编码梳理

    之前对form单提交的操作一直都是迷迷糊糊,知道怎么用,但是随着ajax2的出现,我们有更多的方式操作form表单提交,但是底层的原理我们要好好的做个梳理. 常见的form提交有post和get这两种 ...

  5. VC++动态链接库(DLL)编程深入浅出:Q&A(原创)

    Q1:extern “C” 是做什么用的? A1:一种情况是多个文件中,变量声明或者函数声明,需要extern “C”,这种情况在这里不做讨论. 在dll工程中,被extern "C&quo ...

  6. BZOJ1251 序列终结者(Splay平衡树)(占位)

    网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量…… ...

  7. 如何理解 Spring 注入

    先看一段代码 假设你编写了两个类,一个是人(Person),一个是手机(Mobile). 人有时候需要用手机打电话,需要用到手机的dialUp方法. 传统的写法是这样: Java code publi ...

  8. javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据

    javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...

  9. ASM认证与口令文件

    ASM认证 ORACLE ASM 实例没有数据字典,所以连接ASM 实例只能通过如下三种系统权限来进行连接: SYSASM,SYSDBA,SYSOPER. 可以通过如下三种模式来连接ASM 实例:1. ...

  10. BZOJ3784:树上的路径

    浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...