题目描述

【背景】

不阅读本题的【背景】并不影响通过本题。

三体信息中没有包含对三体⼈⽣物形态的任何描述,⼈类要在四百多年以后才能真正看到三体⼈。在阅读信息时,叶⽂洁只能把三体⼈想象成⼈类的形象。

1379 号监听站已经存在了上千年,像这样的监听站,在三体世界中有⼏千个,它们全神贯注地聆听着宇宙间可能存在的智慧⽂明的信息。最初监听站中有上百名监听员,但随着技术的进步,现在只有⼀个⼈值守了。监听员是⼀个卑微的职业,他们虽然⾝处恒温且能保证⽣活供给的监听室中,在乱世纪不必脱⽔,但他们的⽣命也就在这⼩⼩的空间中流逝,能够享受到的恒纪元快乐⽐其他⼈要少得多。1379 号监听员投过⼩⼩的床⼦看着外⾯的三体世界,这是乱纪元的⿊夜,巨⽉还没有升起来,⼤多数⼈都处于脱⽔的冬眠中,甚⾄植物也本能地脱⽔了,成了附着于地表没有⽣命的⼀束⼲纤维。星光下,⼤地看上去像⼀⼤块冰冷的⾦属。

这是最孤寂的时刻,在静静的午夜,宇宙向它的聆听者展⽰着⼴漠的荒凉。 1379 号监听员最不愿意看的,就是显⽰器上缓缓移动的那条曲线,那是监听系统接收到的宇宙电波的波形,⽆意义的噪声。他感到这条⽆限长的线就是宇宙的抽象,⼀头连着⽆限的过去,另⼀头连着⽆限的未来,中间只有为⽆规律⽆⽣命的随机起伏。⼀个个⾼低错落的波峰就像⼀粒粒⼤⼩不等的沙⼦,整条线就像是所有沙粒排成⾏形成的⼀维沙漠,荒凉寂寥,长得令⼈⽆法忍受。你可以沿着它向前向后⾛⽆限远,但永远找不到归宿。

【问题描述】

监听的宇宙电波可以抽象成⼀个长度为 L 的⼩写字母组成的字符串。

同时在三体⼈总结出来了 n 段敏感电波的样⼦,每段敏感电波的长度都是 m。

现在请你实现⼀个程序,求出在这长度为 L 的⼩写字母组成的字符串中某个敏感电波第⼀次出现的位置(位置从 1 开始计数)。

如果从头到尾,没有任何敏感电波出现,输出”no”(不带双引号)。

输入

第⼀⾏三个整数 L, n, m。

接下来 n ⾏,每⾏⼀个长度为 m 的字符串,表⽰敏感电波。

接下来⼀⾏,⼀个长度为 L 的字符串,表⽰监听到的电波。

输出

输出⼀个整数或者⼀个字符串”no”(不带双引号)。

样例输入

11 3 3
aba
cba
abc
aaabbabcaba

样例输出

6

【样例输入 2】

11 3 3
aba
cba
abc
aaabbabzabz

【样例输出 2】

no

对于前 30% 的数据, 1 ≤ L ≤ 100, 1 ≤ n ≤ 100, 1 ≤ m ≤ 20。

对于前 50% 的数据, 1 ≤ L ≤ 10000, 1 ≤ n ≤ 1000, 1 ≤ m ≤ 20。

对于另外 20% 的数据, n = 1。

对于前 100% 的数据, 1 ≤ L ≤ 10^5, 1 ≤ n ≤ 10^4, 1 ≤ m ≤ 20。

本来以为要用KMP,但是我不会!

后来又想到了AC自动机这个吓人的东西,但是——我不会

于是考虑到NOIP阶段常用的字符串匹配方法,其实还是hash比较多,但是hash的缺点是只适用于子串长度相同的情况,否则又要变成 $ \Theta ( n ^ 2 ) $ 了

于是这道题就直接把所有待匹配的串散列出来,然后在主串中枚举长度相等的部分,同取hash值并用二分查找验证存在性就好了(当然,要先把散列表排序)

AC代码:

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#define ull unsigned long long const int N = 1e5 + 5;
const int base=233; int L,n,m;
char s[N],ss[N];
ull h[N]; inline bool check(int l,int r,ull val){
#define mid ((l+r)>>1)
while(l<=r){
if(h[mid]==val) return true;
if(h[mid]>val) r=mid-1;
if(h[mid]<val) l=mid+1;
}
#undef mid
return false;
} int main(){
scanf("%d%d%d",&L,&n,&m);
for(int i=1;i<=n;++i){
scanf("%s",ss);
for(int j=0;j<m;++j) h[i]=h[i]*base+ss[j];
}
scanf("%s",s+1);std::sort(h+1,h+n+1);
for(int i=1;i<=L;++i){
register ull tmp=0;
for(int j=i;j<m+i;++j) tmp=tmp*base+s[j];
if(check(1,n,tmp)){printf("%d\n",i);return 0;}
}
puts("no");
return 0;
}

清北学堂 清北-Day1-R2-监听monitor的更多相关文章

  1. Windows平台下Oracle 11g R2监听文件日志过大,造成客户端无法连接的问题处理

    近期部署在生产环境的应用突然无法访问,查看应用日志发现无法获取数据库连接. SystemErr R Caused by: oracle.net.ns.NetException: The Network ...

  2. 清北学堂学习总结day1

    上午篇 一.高精度计算: [以下内容先只考虑非负数情况] •高精度加法: 思路:[模拟竖式运算] 注意:[进位] •高精度减法: 思路:[同加法类似,模拟竖式运算,进位变退位] 注意: [结果为负数的 ...

  3. 清北学堂寒假集训DAY1

    第一天,上午讲了些基本的技巧和简单算法,主要就是适应这里. 中午跑到食堂吃了顿“饭”(我并没有挖苦233333),然后回宿舍休息休息 因为 迎接我们的是模拟啊啊啊啊啊阿 下午题一发下来,并没有想象中的 ...

  4. 清北学堂学习总结 day1 数据结构 练习

    1.二叉搜索树 STL set直接做就可以了 2.树状数组+差分数列: codevs 1081 线段树练习 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Maste ...

  5. 清北学堂算法&&数据结构DAY1——知识整理

    简述: 今天主要讲分治(主要是二分).倍增.贪心.搜索,还乱入了爬山算法和模拟退火(汗...) 一.分(er)治(fen): 二分是个在OI中广泛运用的思想,随便举些例子,就足以发现二分的运用的广泛性 ...

  6. 清北学堂 清北-Day3-R2-打架 (fight)

    题目描述 LYK有 \(n\) 个小朋友排成一排.第 \(i\) 个小朋友的战斗力是 $ a_i $,且他们的战斗力互不相同. 战斗力高的会打败战斗力低的. LYK想恶搞这些小朋友们,具体地,它有 \ ...

  7. 清北学堂 清北-Day5-R2-xor

    有 $ n $ 个物品,每个物品有两个属性 $ a_i,b_i $ ,挑选出若干物品,使得这些物品 $ a_i $ 的异或和 $ x \le m \(.问在这一限制下,\) b_i $ 的总和最大可能 ...

  8. 清北学堂 清北-Day1-R1-Count

    题目描述 问有几个无序二元组 (x; y) 满足 xy ≡ 1 (mod P ); 0 ≤ x < P; 0 ≤ y <P.无序二元组是指,如果 P = 10, (3; 7) 和 (7; ...

  9. JavaFx 监听剪切板实现(Kotlin)

    原文地址: JavaFx 监听剪切板实现(Kotlin) | Stars-One的杂货小窝 软件有个需求,想要实现监听剪切板的内容,若内容符合预期,则进行相关的操作,就可以免去用户手动粘贴的操作,提供 ...

随机推荐

  1. 字符设备驱动(二)---key的使用:查询方式

    ---恢复内容开始--- 一.硬件电路 1.1 电路原理图 S1-S5共5个按键,其中,S2-S4为中断按键,S1为复位按键.S1直接为硬件复位电路,并不需要我们写进驱动. 单片机接口如下图: 由图中 ...

  2. system("x")

    system("pause");和system("cls")使用示例程序 #include "stdio.h" #include " ...

  3. 【bzoj 1143】[CTSC2008]祭祀river

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成 ...

  4. 【51nod 1331】狭窄的通道

    Description 有一个长为L的狭窄通道,我们假设这个通道在x轴上,其两个出口分别在x=0与x=L处.在这个通道里有N只狼,第i只狼有一个初始位置ai,它想到达位置bi(0<=i<N ...

  5. luogu P3240 [HNOI2015]实验比较

    传送门 首先根据题目条件,题目中如果是=的点可以缩起来,然后\(a<b\)连边\(a\rightarrow b\),而且所有点入度为最多1,那么判掉有环的不合法情况,题目中的依赖关系就是一颗外向 ...

  6. bebugger调试理解commonJS原理

    上面图片是bebugger一个导入的模块,使用vscode可以轻松的看到调用栈,通过断点调试进入断点 Mode函数的原型里面有一个require方法,函数里面有Module._load()加载模块,传 ...

  7. 5.22 css和基本选择器

    1,css的三种引入方式 1,行内样式 2,内接样式 3,外接样式:链接式和导入式. HTML的缺陷: 不能够适应多种设备 要求浏览器必须智能化足够庞大 数据和显示没有分开 功能不够强大 CSS 优点 ...

  8. python 数据分析2

    本节概要 Numpy详解 安装 Numpy的安装已经不想多说..在确保pip或pip3的路径被添加到系统环境变量里面之后,就可以直接用下面语句进行安装. pip install numpy or pi ...

  9. 关于Scroller的使用

    这篇文章讲解的很详细 https://blog.csdn.net/u011102153/article/details/53337648

  10. jquery和javascript的区别

    jquery 就对javascript的一个扩展,封装,就是让javascript更好用,更简单,为了说明区别,下面与大家分享下JavaScript 与JQuery 常用方法比较 jquery 就对j ...