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] && 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瞎搞的更多相关文章
- BZOJ 4236: JOIOJI MAP
4236: JOIOJI Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.ph ...
- TOJ3097: 单词后缀 (字典树 or map瞎搞)
传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...
- 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 "JOIOJI"(前缀和+map+pair)
传送门: [1]:BZOJ [2]:洛谷 •题解 定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和: 要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R] ...
- BZOJ 4236 JOIOJI(前缀和)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4236 [题目大意] 给出一个只包含三种字母的字符串,求出三种字母数量相等的最长子串 [ ...
- BZOJ 4236: JOIOJI
Description 给出一个字符串,只包含3个字母,询问最长的一个子串,3个字母出现次数相同. Sol map. 如果一个子串满足条件,那么它端点处的三个字母的个数两两差值都是一样的,直接存个状态 ...
- bzoj 2456: mode【瞎搞】
这题加个#include都会MLE-- 神思路,每个数抵消宇哥和它不同的数,最后剩下的就是众数 #include<cstdio> int n,la,x,tot; int main() { ...
- 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,记 ...
- Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞
Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...
随机推荐
- python的writelines读空行
在文件中,如果遇到一个空白行,readline()并不会返回一个空串,因为每一行的末尾还有一个或多个分隔符,因此“空白行”至少会有一个换行符或者系统使用的其他符号.只有当真的读到文件末尾时,才会读到空 ...
- python之tkinter_2
关于tkinter的组件介绍,这篇博客很详细: https://www.cnblogs.com/aland-1415/p/6849193.html tkinter is to make interfa ...
- 织梦简洁机械设备dedecms模板
织梦简洁机械设备dedecms模板,个人网站模板,dedecms模板. 模板地址:http://www.huiyi8.com/sc/7269.html
- BZOJ 1370 [Baltic2003]Gang团伙:并查集【虚点】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1370 题意: 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: (1)我 ...
- BZOJ 1207 [HNOI2004]打鼹鼠:dp【类似最长上升子序列】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1207 题意: 有一个n*n的网格,接下来一段时间内会有m只鼹鼠出现. 第i只鼹鼠会在tim ...
- xgboost算法原理
XGBoost是2014年3月陈天奇博士提出的,是基于CART树的一种boosting算法,XGBoost使用CART树有两点原因:对于分类问题,CART树的叶子结点对应的值是一个实际的分数,而非一个 ...
- MFC模态对话框程序不响应OnIdle
从代码分析原因吧: OnIdle函数在MFC的CWinThread::Run函数中被调用,如下 // main running routine until thread exits int CWinT ...
- laravel登录后台500错误!
登录页面正常显示,填写完用户名密码 点登录后 页面一片空白,没有任何输出.debug可以看到一个500错误,preview和response都是空的.追踪了一下 发现在public/index.php ...
- 微信小程序之tab切换
.wxml <view class="select_box"> <scroll-view scroll-x="true" style=&quo ...
- js动态加载activeX控件在IE11与低版本IE中的差异
由于IE11更加遵循W3C规范,所以IE11与低版本IE在加载activeX时有差别. 1.IE11中动态加载activeX的顺序 var objectTag = document.createEle ...