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. jquery工具类函数

    1,获取浏览器的名称与版本信息 在jquery中,通过$.browser对象可以获取浏览器的名称和版本信息,如$.browser.chrome为true,表示当前为chrome浏览器,$.broese ...

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

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

  3. 51nod1305 Pairwise Sum and Divide

    题目链接:51nod 1305 Pairwise Sum and Divide 看完题我想都没想就直接暴力做了,AC后突然就反应过来了... Floor( (a+b)/(a*b) )=Floor( ( ...

  4. Z表数据EXCEL导入

    很多项目都有这种需求,虽然别人用的各有不同,不过闲来无事,还是自己搞了一个出来.基于EXCEL的导入. *&------------------------------------------ ...

  5. maven webjar构建及使用

    这么做的目的想要把前端静态文件,css啊js啊一堆的放在一个maven工程下管理,需要的时候调用jar包直接引用. 1.把要打包文件放到另外的maven项目的/src/main/resources下 ...

  6. Oracle表空间,用户,用户授权

    一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客“怎样玩转千万级 ...

  7. 实际项目中的一个angularjs 应用

    实际需求:通过下拉框,选择自己需要的类型,创建元素(要求必须是输入点击保存了才能出现对应的类型块) html代码: <div class="list-panel-data"& ...

  8. 189. Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  9. js 判断IE浏览器,包含IE6/7/8/9

    //判断IE6-9的版本,num可取值为6/7/8/9//若不给参数num,仅判断浏览器是否为IE,不判断版本 var isIE = function (num) { if(arguments.len ...

  10. 图片上传预览 (URL.createObjectURL)

    知识预备:1. URL.createObjectURL() 静态方法会创建一个 DOMString,它的 URL 表示参数中的对象.这个 URL 的生命周期和创建它的窗口中的 document 绑定. ...