BZOJ 1461: 字符串的匹配
Description
同上题.
Sol
KMP+树状数组.
写这题的时候我灰常naive...不管了...直接贴代码...
Code
- /**************************************************************
- Problem: 1461
- User: BeiYu
- Language: C++
- Result: Accepted
- Time:756 ms
- Memory:13032 kb
- ****************************************************************/
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- using namespace std;
- #define N 500005
- #define M 10005
- int a[N],b[N],rk1[N],rk2[N],f[N],ans[N];int c[M];
- int n,m,s,t;
- inline int in(int x=0,char ch=getchar()){
- while(ch>'9'||ch<'0') ch=getchar();
- while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
- return x;
- }
- inline int lowbit(int x){return x&(-x);}
- inline void add(int x,int v){while(x<=s) c[x]+=v,x+=lowbit(x);}
- inline int sum(int x,int res=0){while(x) res+=c[x],x-=lowbit(x);return res;}
- int main(){
- n=in(),m=in(),s=in();
- for(int i=0;i<n;i++) a[i]=in();
- for(int i=0;i<m;i++) b[i]=in(),add(b[i],1),rk1[i]=sum(b[i]-1),rk2[i]=sum(b[i]);
- memset(c,0,sizeof(c));
- for(int i=1,j;i<m;i++){
- j=f[i];add(b[i],1);
- while(j&&(sum(b[j]-1)!=rk1[i]||sum(b[j])!=rk2[i])){
- for(int p=i-j;p<i-f[j];p++) add(b[p],-1);
- j=f[j];
- }
- f[i+1]=(rk1[j]==sum(b[i]-1)&&rk2[j]==sum(b[i]))?j+1:0;
- }
- memset(c,0,sizeof(c));
- for(int i=0,j=0;i<n;i++){
- add(a[i],1);
- while(j&&(sum(a[i]-1)!=rk1[j]||sum(a[i])!=rk2[j])){
- for(int p=i-j;p<i-f[j];p++) add(a[p],-1);
- j=f[j];
- }
- if(sum(a[i]-1)==rk1[j]&&sum(a[i])==rk2[j]) j++;
- if(j==m){
- ans[++t]=i-j+1;
- for(int p=i-j+1;p<=i;p++) add(a[p],-1);
- j=0;
- }
- }
- printf("%d\n",t);
- for(int i=1;i<=t;i++) printf("%d\n",ans[i]+1);
- return 0;
- }
BZOJ 1461: 字符串的匹配的更多相关文章
- [bzoj1892][bzoj2384][bzoj1461][Ceoi2011]Match/字符串的匹配_KMP_树状数组
2384: [Ceoi2011]Match 1892: Match 1461: 字符串的匹配 题目大意: 数据范围: 题解: 很巧妙的一道题呀. 需要对$KMP$算法有很深的理解才行. 首先我们需要发 ...
- Oracle添加数据报文字与格式字符串不匹配错误
今天在学习Oracle时碰到一个错:文字与格式字符串不匹配. 我在Oracle数据库中创建了一张表: --创建员工表employee create table employee ( empon ) n ...
- oracle文字与格式字符串不匹配的解决
oracle文字与格式字符串不匹配的解决 oracle的日期时间类型 在往oracle的date类型插入数据的时候,记得要用to_date()方法. 如insert into CUSLOGS(STAR ...
- 带’*’号字符串的匹配
目标: 判断源字符串中是否含有指定子串,子串可能会有*号通配符. 初步测试没问题.记录下来.后面要是有问题再来纠正. #include <string> using namespace s ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- java.sql.SQLException:ORA-01861:文字和格式字符串不匹配
1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...
- 异常-----java.sql.SQLException:ORA-01861:文字和格式字符串不匹配
1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...
- Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法
一.写sql的方式插入到Oracle中 往oracle中插入时间 '2007-12-28 10:07:24'如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07: ...
- C++实现的字符串模糊匹配
C++基本没有正则表达式功能,当然像Boost里提供了正则.本文来源于博客园园友的一篇文章,请看: C/C++ 字符串模糊匹配 很早之前就看过这篇文章,原作者的需求很明确.代码实现也很好. 之所以又写 ...
随机推荐
- JavaWeb学习笔记——jsp内置对象
- 重启nginx
在env/nginx/sbin目录下输入:nginx,即可重启
- HTML \ XHTML \XML 的区别
虽然是很简单的知识,但如果总是在需要的时候去查找,不需要的时候就丢掉,未免心里总是觉的不踏实.因为你就像是垃圾收购站,有垃圾(知识)就往里面拖,拖不下了就丢掉一些(忘了).不去整理,也因此也不知道丢的 ...
- aufomaper Queryable Extensions ProjectTo
When using an ORM such as NHibernate or Entity Framework with AutoMapper's standard Mapper.Map funct ...
- jQuery监听键盘事件及相关操作使用教程
一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件 3.keypress() k ...
- OC-Q&A
How to declare a string in Objective-C ? A C string is just like in C. char myCString[] = "test ...
- ZooKeepr日志清理【转】
转自 :@ni掌柜nileader@gmail.com 地址 数据文件管理 默认情况下,ZK的数据文件和事务日志是保存在同一个目录中,建议是将事务日志存储到单独的磁盘上. 1 数据目录 ZK的数据目录 ...
- JS禁止WEB页面鼠标事件大全
<!--禁止鼠标右键代码-->:<noscript><ifra:<scriptlanguage=javas:<!--:if(window.Event):doc ...
- mfc 调试 弹消息
AfxMessageBox(_T("edit change msg")); OutputDebugString(L"jian "); CString str; ...
- BufferedReader readLine()方法
控制台输入字符串之后回车,后台接收传来的字符串,代码如下: import java.io.BufferedReader; import java.io.IOException; import java ...