BZOJ 1462: Superkmp
Description
匹配字符串A,B,匹配条件是在A长度为=B的子串中,排名顺序相同.
Sol
KMP+树状数组.
KMP匹配的时候计算排名就可以了啊...这个东西可以用树状数组维护.
这题是个双倍经验啊...
其实不用树状数组也可以,因为字符集很小,开个什么数组就可以搞,我就根据辣个题改了改而已...
Code
/**************************************************************
Problem: 1462
User: BeiYu
Language: C++
Result: Accepted
Time:1340 ms
Memory:3676 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 100005
#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<M) 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 solve(){
m=in(),n=in();
memset(c,0,sizeof(c));
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]);
for(int i=0;i<n;i++) a[i]=in();
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){
return i-j+1;
for(int p=i-j+1;p<=i;p++) add(a[p],-1);
j=0;
}
}return -1;
}
int main(){
for(int T=in();T--;){
int tmp=solve();
if(~tmp) printf("%d\n",tmp);
else puts("no solution!");
}
return 0;
}
BZOJ 1462: Superkmp的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
- 【splay】文艺平衡树 BZOJ 3223
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
随机推荐
- HTML5基本布局
HTML4布局 HTML5布局 基本的HTML5文档的模式为: <!DOCTYPE html> <html lang = "en"> <head> ...
- Intellij Idea中运行tomcat 报內存溢出 解决方案 火龙战士 火龙战士
在Run/Debug configuration 的你要运行行的tomcat里面的 vm options里面输入 -server -XX:PermSize=128M -XX:MaxPermSize=2 ...
- 几种 Java 序列化方案的性能比较
较结果: create ser deser total size +dfl java-built-in 62 5608 29649 35257 889 514 hessian 65 3812 6708 ...
- [Asp.net mvc]jquery.form.js无刷新上传
写在前面 最近在自己的网盘项目中想用ajax.beginform的方式做无刷新的操作,提交表单什么的都可以,但针对文件上传,就是个鸡肋.在网上查找了发现很多人都遇到了这个问题,大部分都推荐使用jque ...
- java设计模式设计模式
JAVA设计模式之单例模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一 ...
- OB函数
ob_start 打开输出控制缓冲 ob_get_contents 返回输出缓冲区内容 ob_clean 清空( ...
- [原] Android性能优化方法
GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用Hierarch ...
- .NET之委托
有些.NET中的高级特性,比如:委托! 有一种怎么也搞不懂的赶脚... 博客读了好几篇,代码也动手写了,书中的一些介绍也看了, 各种搜索关于委托的,至今还处于"会用"的阶段. 该怎 ...
- VTK初学一,a Mesh from vtkImageData—球冠
#ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRend ...
- IOS开发之----NSDictionary,JSON和XML互相转换
本文永久地址为 http://www.cnblogs.com/ChenYilong/p/4044521.html,转载请注明出处. -(void)test { //XML文本范例 ...