【BZOJ4236】JOIOJI STL
【BZOJ4236】JOIOJI
Description
Input
Output
Sample Input
JOIIJOJOOI
Sample Output
HINT
题解:本题要求三个字符的数量都相同,我们仍然采用前缀相减的方式,设sj,so,si表示J,O,I的前缀出现次数,那么条件就是:
sj[i]-sj[j]=so[i]-so[j]=si[i]-si[j]
移项,得
sj[i]-so[i]=sj[j]-so[j],sj[i]-si[i]=si[i]-si[j]
这样就转变成让i和j的两个权值都相等的问题,用map存一下就好了
然而我一开始忘了map怎么用,手写treap水过~
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
const int maxn=200010;
int rt[maxn<<1],ch[maxn][2],v[maxn],k[maxn],w[maxn];
int n,tot,s1,s2,s3,ans;
char str[maxn];
void rotate(int &x,int d)
{
int y=ch[x][d];
ch[x][d]=ch[y][d^1];
ch[y][d^1]=x;
x=y;
}
void insert(int &x,int y,int z)
{
if(!x)
{
x=++tot;
v[x]=y,w[x]=z,k[x]=rand();
return ;
}
int d=y<v[x]?0:1;
insert(ch[x][d],y,z);
if(k[ch[x][d]]>k[x]) rotate(x,d);
}
int find(int x,int y)
{
if(!x) return 0;
if(y==v[x]) return x;
if(y<v[x]) return find(ch[x][0],y);
return find(ch[x][1],y);
}
int main()
{
srand(2333333);
scanf("%d",&n);
scanf("%s",str);
int i;
insert(rt[n],0,0);
for(i=1;i<=n;i++)
{
if(str[i-1]=='J') s1++;
if(str[i-1]=='O') s2++;
if(str[i-1]=='I') s3++;
int t=find(rt[s1-s2+n],s2-s3);
if(!t) insert(rt[s1-s2+n],s2-s3,i);
else ans=max(ans,i-w[t]);
}
printf("%d",ans);
return 0;
}
【BZOJ4236】JOIOJI STL的更多相关文章
- 【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” ...
- 【Example】C++ STL 常用容器概述
前排提醒: 由于 Microsoft Docs 全是机翻.所以本文表格是我人脑补翻+审校. 如果有纰漏.模糊及时评论反馈. 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器. 这些 ...
- 【转】C++ STL 相关的问题集合
3.C++ STL中vector的相关问题: (1).调用push_back时,其内部的内存分配是如何进行的? (2).调用clear时,内部是如何具体实现的?若想将其内存释放,该如何操作 ...
- 【转】C++ STL快速入门
转自:https://www.cnblogs.com/skyfsm/p/6934246.html 冠军的试炼 悟已往之不谏,知来者之可追 博客园 首页 新随笔 联系 订阅 管理 随笔 - 60 文章 ...
- 【C++】:STL迭代器使用---[容器::iterator iter;]
参考文章:http://blog.csdn.net/qq_23100787/article/details/51388163 迭代器这种东西,就是为了使访问简单!! 容器::iterator iter ...
- 【经验】实现STL算法时遇到的模板编译错误问题
在实现set_union算法时调用了自己写的copy算法,出现了以下问题. Error 1 error C2665: 'xyz_stl::__copy' : none of the 2 overloa ...
- 【C++】朝花夕拾——STL vector
STL之vector篇 N久之前是拿C的数组实现过vector中的一些简单功能,什么深拷贝.增删查找之类的,以为vector的实现也就是这样了,现在想想真是...too young too naive ...
- 【转载】C++ STL priority_queue用法
priority_queue 对于基本类型的使用方法相对简单.他的模板声明带有三个参数,priority_queue<Type, Container, Functional> Type 为 ...
随机推荐
- linux大小写转换
[root@ob2 mytmp]# cat aa2.txt|sed 's#[a-z]#\u&#g'ETH0 LINK ENCAP:ETHERNET HWADDR 00:0C:29: ...
- bootstrap-slider插件使用方法
bootstrap-slider例子地址:https://seiyria.com/bootstrap-slider/ bootstrap-slider github地址:https://github. ...
- Error -27740: WSA_IO_pending
Error -27740: WSA_IO_pendingAction.c(198): Error -27791: Server **** has shut down the connection pr ...
- pip -i 和 -U 参数
例子: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U funcat -i: 指定库的安装源 -U:升级 原来已经安装的包,不带U ...
- MFC HTTP GET 请求
//HTTP GET 下载文件 CInternetSession *pInetSession = new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_I ...
- e660. 用一组像素创建图像
This example demonstrates how to convert a byte array of pixel values that are indices to a color ta ...
- android项目中的拍照和本地图片截图
1,得到保存截图文件的地址 private static final String IMAGE_FILE_LOCATION = Environment.getExternalStorageDirect ...
- 搞笑的<Button></Button>
<button>竟然默认是submit按钮</button>.........................
- 适配器模式(Adapter Pattern)----------结构型模式
对象适配器模式的缺点是:与类适配器模式相比,要在适配器中置换适配着类的某些方法比较麻烦.如果一定要置换掉适配者类的一个或多个方法,可以先做一个适配者类的子类,在子类中将适配者类的方法置换掉,然后再把适 ...
- Tomcat源码学习
Tomcat源码学习(一) 转自:http://carllgc.blog.ccidnet.com/blog-htm-do-showone-uid-4092-type-blog-itemid-26309 ...