【KMP】【poj3167】【bzoj1729】Cow Patterns (kmp变形)
来源:互联网 发布:2016欧洲杯数据 编辑:程序博客网 时间:2024/06/01 10:42
两个序列的偏序关系相同当且仅当这两个序列的每个位置上的元素前面等于它的元素个数和小于它的元素个数都相等题意给定一个顺序序列表示奶牛的排列顺序,定义串a=b当且仅当a的每位的排名=b的每位的排名。
参考:http://blog.csdn.net/waitfor_/article/details/7717059
#include<stdio.h> #include<string.h> int a[100010],b[25010]; int c[30]; //树状数组中的元素 int m1[25010],m2[25010]; //(匹配串中)m1表示小于,m2表示小于等于 int n,k,s; int next[25010]; int pop[100010],all; int lowbit(int x){ return x&(x^(x-1)); } int sum(int x){ int ss=0; while(x>0){ ss+=c[x]; x-=lowbit(x); } return ss; } void update(int x,int val){ while(x<=s){ c[x]+=val; x+=lowbit(x); } } void getnext(){ int i=1,j=0,kk; next[1]=0; while(i<=k){ if(j==0 || (sum(b[i]-1)==m1[j] && sum(b[i])==m2[j])){ i++,j++; next[i]=j; if(i==k+1) return ; update(b[i],1); } else{ for(kk=i-j+1;kk<=i-next[j];kk++) //这里对next[j]之前的b[i]都要消除 update(b[kk],-1); j=next[j]; } } } int kmp(){ //这里对待匹配串用树状数组记录 int i=1,j=1,f; update(a[1],1); while(i<=n){ if(j==0 ||(sum(a[i]-1)==m1[j] && sum(a[i])==m2[j])){ ++i,++j; if(i<=n) update(a[i],1); } else{ for(f=i-j+1;f<=i-next[j];f++) update(a[f],-1); j=next[j]; } if(j>k){ for(f=i-j+1;f<=i-next[j];f++) update(a[f],-1); all++; pop[all]=i-1; j=next[j]; } } return all; } int main(){ int i,j; scanf("%d %d %d",&n,&k,&s); for(i=1;i<=n;i++) scanf("%d",&a[i]); memset(c,0,sizeof(c)); memset(m1,0,sizeof(m1)); memset(m2,0,sizeof(m2)); for(i=1;i<=k;i++){ scanf("%d",&b[i]); update(b[i],1); m1[i]=sum(b[i]-1); m2[i]=sum(b[i]); } memset(c,0,sizeof(c)); getnext(); memset(c,0,sizeof(c)); printf("%d\n",kmp()); for(i=1;i<=all;i++) printf("%d\n",pop[i]+1-k); }
阅读全文
0 0
- 【KMP】【poj3167】【bzoj1729】Cow Patterns (kmp变形)
- 【KMP】【poj3167】【bzoj1729】Cow Patterns
- POJ3167 Cow Patterns (KMP)
- [kmp] POJ3167 Cow Patterns
- poj3167 Cow Patterns KMP、树状数组
- bzoj1729 [Usaco2005 dec]Cow Patterns 牛的模式匹配 kmp+乱搞
- POJ3167 KMP
- poj3167 Cow Patterns
- poj 3167 Cow Patterns kmp
- poj3167&hdu4749 KMP+BIT
- pku 3167 Cow Patterns(kmp)
- POJ 3167 Cow Patterns (KMP + 树状数组)
- poj 3167 Cow Patterns(kmp)
- POJ-3167- Cow Patterns(KMP)
- POJ 3167 Cow Patterns KMP+暴力
- hdu 1867 Cow Patterns kmp模板
- poj 3167 Cow Patterns ... 四种算法 (均结合kmp)
- poj 3167 Cow Patterns (kmp + 线段树/树状数组)
- 递归实现费氏数列:0,1,1,2,3,5,8,13,21,34,55,89,... ...
- java通过JDBC链接SQLServer2012
- 倒计时封装 程序进入后台不会暂停计时器
- React Native入门(十一)之屏幕适配
- Error:Unable to find method 'com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;'.
- 【KMP】【poj3167】【bzoj1729】Cow Patterns (kmp变形)
- Excel上传示例及后台解析Excel
- 学习Java8--Lambda表达式
- Spark 编程指南(一)
- 论文代发过程注意哪些事项
- 基于802.11协议的节能技术
- ImageNet Evolution论文笔记(3)
- Ucam v8.4.1 WinALL 1CD完整好用\
- JZOJ 5425. 【NOIP2017提高A组集训10.25】数论