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. Const关键字

    const const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...

  2. 关于PHP函数time() date() 和 strtotime() 的时区问题

    最近项目中有个需求, 要记录新注册用户的次日登录情况, 于是写出了如下代码: $create_time = '用户注册时间'; //格式 Y-m-d H:i:s $time = time(); $la ...

  3. 解决 git 提交文件提示 Filename too long 问题

    1.git config --system core.longpaths true 2.git config core.longpaths true

  4. thunkify 模块

    function thunkify(fn){ assert('function' == typeof fn, 'function required'); return function(){ var ...

  5. ROS机器人语音交互(一)

    语音交互早期已经广泛应用在手机端,电脑端,随着技术的成熟,接口逐渐开放,ROS上老外搞的开源语音识别只支持英文,识别率还低. 国内语音识别技术已经相当成熟稳定.感谢ros小课堂的讲解,解决了自己的疑惑 ...

  6. Android中的Service小结

    简介 Service适合执行不需要和用户交互,而且长期运行的任务.即使程序被切换回后台,服务仍然可以正常运行.Service并不自动开启线程,默认运行在主线程中. Service中需要重载的函数 on ...

  7. MS SQLSERVER中如何快速获取表的记录总数

    在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等.我们通常的做法是:select count(*) as c from tableA .然而对 ...

  8. 面试复习(C++)之快速排序

    #include <iostream> using namespace std; void Quicksort(int *a,int low,int high) { if(low>h ...

  9. Single-page app(SPA)

    有哪些值得推荐的一页式网站(Single-page app)? http://pro.weltrade.com/en/ 最近开到一下国外网站,一页到底,感觉很高大上,到底是怎么做出来的呢?技术要点是什 ...

  10. 场景4 Data Warehouse Management 数据仓库

    场景4 Data Warehouse Management 数据仓库 parallel 4 100% —> 必须获得指定的4个并行度,如果获得的进程个数小于设置的并行度个数,则操作失败 para ...