BZOJ 1461 && BZOJ 1729

KMP+BIT

一看就是字符串匹配但是不同的是要按照每个字符的排名情况。

首先对于数字x的排名,那么要判断x前小于x的数的个数,和x前小于等于x的数的个数,这两个都相等才相等。因为会有数字会有重复的.

然后可以先预处理出字串的每个数字的排名,这样就不需要两个BIT了。最后按照KMP的思路做就可以了.

 #include <cstdio>
#include <cstring>
const int MaxN=;
const int MaxS=;
int a[MaxN],b[MaxN],Rk1[MaxN],Rk2[MaxN],Ans[MaxN],tot,n,k,s,P[MaxN];
int c[MaxS];
inline int Lowbit(int x) {return x&-x;}
inline void Add(int x,int d)
{for (int i=x;i<=s;i+=Lowbit(i)) c[i]+=d;}
inline int Query(int x)
{
int Ret=;
for (int i=x;i;i-=Lowbit(i)) Ret+=c[i];
return Ret;
}
int main()
{
scanf("%d%d%d",&n,&k,&s);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=k;i++)
{
scanf("%d",&b[i]); Add(b[i],);
Rk1[i]=Query(b[i]),Rk2[i]=Query(b[i]-);
}
memset(c,,sizeof(c)); int j=;
for (int i=;i<=k;i++)
{
Add(b[i],);
while (j && ((Query(b[i])!=Rk1[j+]) || (Query(b[i]-)!=Rk2[j+])))
{
for (int l=i-j;l<i-P[j];l++) Add(b[l],-);
j=P[j];
}
if ((Query(b[i])==Rk1[j+]) && (Query(b[i]-)==Rk2[j+])) j++;
P[i]=j;
}
memset(c,,sizeof(c)); j=;
for (int i=;i<=n;i++)
{
Add(a[i],);
while (j && (Query(a[i])!=Rk1[j+] || Query(a[i]-)!=Rk2[j+]))
{
for (int l=i-j;l<i-P[j];l++) Add(a[l],-);
j=P[j];
}
if (Query(a[i])==Rk1[j+] && Query(a[i]-)==Rk2[j+]) j++;
if (j==k)
{
Ans[++tot]=i-j+;
for (int l=i-j+;l<=i-P[j];l++) Add(a[l],-);
j=P[j];
}
}
printf("%d\n",tot);
for (int i=;i<=tot;i++) printf("%d\n",Ans[i]);
return ; }

双倍经验

NOIP 考前 KMP练习的更多相关文章

  1. NOIP考前划水

    NOIP考前划水 君指先跃动の光は.私の一生不変の信仰に.唯私の超電磁砲永世生き! 要开始背配置了? 3行不谢. (setq c-default-style "awk") (glo ...

  2. NOIP考纲总结+NOIP考前经验谈

    首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 ...

  3. NOIP考前知识点整理

    前言:距离NOIP还有不到一百天(虽然NOIP没了),为了整理一下所学的内容,才有了这篇博文.本文内容无特殊说明全部来自于博主的博客,代码也都是新敲的,努力在个人的码风基础上做到尽量简洁,求资瓷. 一 ...

  4. noip考前注意事项

    明天就要离开学校,后天的现在Day1已经考完啦,临近考试了紧不紧张呢(不紧张才怪),那么考前我们应该注意点什么呢? 1.带好自己的证件,带好自己的证件,带好自己的证件,这很重要. 2.试机的时候一定要 ...

  5. 2018 noip 考前临死挣扎

    基础算法 倍增 贪心 分块 二分 三分 数据结构 线段树 对顶堆 数学 质数 约数 同余 组合 矩阵乘法 图论 二分图判定以及最大匹配 字符串 Tire树 KMP 最小表示法 Hash Manache ...

  6. NOIP 考前研究

    NOIP 2017 试题研究 D1T1 小凯的疑惑 (45 min) 看到题面,大概是推数学公式. 先打暴力表,观察 \(a,b\) 与 \(n\) 的关系.猜想 \(a×b−a−b\). 引理:对于 ...

  7. noip考前模板复习

    网络流 Dinic(搭配飞行员) //Serene #include<algorithm> #include<iostream> #include<cstring> ...

  8. 【NOIP考前模拟赛】纯数学方法推导——旅行者问题

    一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取. ...

  9. NOIP 考前 队列复习

    BZOJ 1127 #include <cstdio> #include <cstring> #include <iostream> #include <al ...

随机推荐

  1. vue.common.js?e881:433 TypeError: Cannot read property 'nodeName' of undefined

    我觉得吧,是这么个原因,就是响应式要找这个node改它的内容,没找着,就报错了. 用computed监控vuex的state属性,绑定到页面上,如果这个属性改了,因为响应式,那么就要更改页面,如果页面 ...

  2. ArcMap Add-in插件开发中解决VS调试时断点不会命中的问题

    在VS2010中进行ArcMap Add-in插件开发(ArcEngine10.1,ArcGIS10.1),运行时为.NET4.0,在程序中设置了断点进行调试,但是运行后程序并不会在断点处停止,且原来 ...

  3. 解决ViewPager多次刷新后重叠问题

    @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) c ...

  4. F2工作流引擎之-纯JS Web在线可拖拽的流程设计器(八)

          Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回.传阅.转交,都可以非常方便快捷地实现,管理员 ...

  5. 通过pip安装模块

    环境:ubuntu,python2/3 命令: pip3 install ipy # 通过pip3给python3.x安装ipypip3 install --upgrade pip # 升级pippi ...

  6. Mongodb创建数据库

    基本语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 实例 以下实例我们创建了数据库 coderschool ...

  7. JAVA动手动脑

    1.运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是 ...

  8. stm8s103头文件

    //============================================================================== //================= ...

  9. Codeforces Round #383 (Div. 1)

    A: 题目大意:给出一个有向图(n<=100),每个点的出度都为1,求最小的t,使得任意两点x,y,如果x走t步后能到y,那么y走t步后到x. 题解: 首先每个点应该都在一个环上,否则无解. 对 ...

  10. Android中日期函数Calendar的一些用法和注意事项

    1.月份获取时加1 Canlendar.MONTH + 1 因为使用的是罗马历,Calendar.MONTH返回的数值不是一年中月份的值,而是当前月份距离第一个月份的差值 如:当前月份为9月份,距离1 ...