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 ...
随机推荐
- Java_HTTP_01_HttpClient
一. 二.参考文档 1. HttpClient官方文档 HttpClient官方文档中文翻译 1.HttpClient 4 实现文件下载 2.httpclient 上传文件.下载文件 3.httpcl ...
- L3-007 天梯地图(30 分)
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...
- ESFramework Demo -- P2P通信Demo(附源码)
现在我们将在ESFramework Demo -- 文件传送Demo 的基础上,使用ESPlus提供的第四个武器,为其增加P2P通信的功能.在阅读本文之前,请务必先掌握ESFramework 开发手册 ...
- HDFS数据迁移目录到正确姿势
添加了一块硬盘,原来的DataNode已经把原有的硬盘占满:怎么办,想要把旧有的数据迁移到新的硬盘上面: 1. 在CDH中修改目录(在HDFS组件中搜索.dir),本例中,新加的硬盘挂载在/data上 ...
- C#编译问题'System.Collections.Generic.IEnumerable' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument
'System.Collections.Generic.IEnumerable<string>' does not contain a definiti ...
- hadoop之一:概念和整体架构
什么是hadoop? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.Hadoop是根据Go ...
- Attribute meta-data#android.support.VERSION@value value=(25.4.0) from AndroidManifest.xml:25:13-35 is also present at AndroidManifest.xml:28:13-35 value=(26.1.0).
Android Studio 编译项目的时候报错 Merging Errors: Error: Attribute meta-data#android.support.VERSION@value va ...
- 怎么查看linux系统是32还是64
1.getconf LONG_BIT or getconf WORD_BIT例如:2.file /bin/ls例如: 查看linux的版本:
- 3. docker容器内信息获取、命令的执行、容器的导入和导出
一.依附容器 依附操作attach通常用在由docker start或者docker restart启动的交互型容器中.由于docker start启动的交互型容器并没有具体终端可以依附,而容器本身是 ...
- Linux C/C++时间字符串与time_t之间的转换方法(转)
1.指定time_t类型的时间,格式化为YYYYMMDDHH24MISS型的字符串 void FormatTime(time_t time1, char *szTime) { struc ...