L: Long Long Ago

时间限制: 1 s      内存限制: 128 MB

提交 我的状态

题目描述

今天SHIELD捕获到一段从敌方基地发出的信息里面包含一串被经过某种算法加密过的的序列L

组织的间谍活动如下几个线索:

这个算法不会改变秘密消息的字符顺序,但是会两个字符之间在中间加入未知个数的字符

如原信息

ab

可能的加密结果

ammmxxxxb

现在你有n个待选关键字

如果这个关键字可能是秘密消息输出Yes,否则输出No

如ammmmxxxxb

可能包含的关键字有

ab

mb

mxb

......

输入

第一行输入一串字符串LL(1≤L≤105)(1≤L≤105)

第二行输入一个整数NN,表示查找字符串的个数。(1≤N≤105)(1≤N≤105)

接下来NN行表示,输入一行字符串MM  n个字符的长度之和为[1,100000]

输出

输出NN行,如果是符合提议就输出Yes,否则输出No

样例输入

noiauwfaurainairtqltqlmomomo
8
rain
air
tql
ntt
xiaobai
oiiiooo
orzcnzcnznb
ooooo

样例输出

Yes
Yes
Yes
Yes
No
Yes
No
No

题解:题目意思是若询问的字符串是原字符串切割出来的,输出Yes,否则输出No,用map记录(我用的是字符与a的差值作为下标)每个字符对应的所有位置,然后每输入一串字符就遍历一次该字符串的所有字母,对于每一个字符二分查找出大于前一个字符所取位置的第一个位置,若未找到则退出遍历,输出No;

#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
#define ll long long
char s[1000011],ss[1000011];
vector<ll>p[33];
ll sort2(ll i,ll k){
if(p[i].size()==0)
return -1;
ll x=0,y=p[i].size()-1;
while(x<=y){
ll m=x+(y-x>>1);
if(p[i][m]>k)
y=m-1;
else
x=m+1;
}
return x<p[i].size()?p[i][x]:-1;
}
int main(){
scanf("%s",s);
for(int i=0;s[i];i++)
p[s[i]-'a'].push_back(i);
// for(int i=0;i<26;i++)
// for(int j=0;j<p[i].size();j++)
// cout<<p[i][j]<<endl;
ll n,k;
scanf("%lld",&n);
while(n--){
scanf("%s",ss);
ll len=strlen(ss)-1;
bool flag=0;
k=-1;
for(int i=0;ss[i];i++){
k=sort2(ss[i]-'a',k);//二分查找大于k的第一个数
if(k==-1)
{flag=1;break;}
}
if(!flag)
printf("Yes\n");
else
printf("No\n" );
}
return 0;
}

Long Long Ago 二分查找的更多相关文章

  1. jvascript 顺序查找和二分查找法

    第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...

  2. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  3. 从一个NOI题目再学习二分查找。

    二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...

  4. java实现二分查找

    /** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...

  5. 最新IP地址数据库 二分逼近&二分查找 高效解析800万大数据之区域分布

    最新IP地址数据库  来自 qqzeng.com 利用二分逼近法(bisection method) ,每秒300多万, 比较高效! 原来的顺序查找算法 效率比较低 readonly string i ...

  6. c#-二分查找-算法

    折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...

  7. 【Python】二分查找算法

    二分查找:在一段数字内,找到中间值,判断要找的值和中间值大小的比较.如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找.如果中间值小一些,则在中间值的右侧区域继续按照上述方式查找.直到找到我们 ...

  8. PHP实现文本快速查找 - 二分查找

    PHP实现文本快速查找 - 二分查找法 起因 先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称.根据网站分类ID获取分类名称.根据关键 ...

  9. java二分查找举例讨论

    最近做笔试题有这么一个关于二分查找的例子. 给一个有序数组,和一个查找目标,用二分查找找出目标所在index,如果不存在,则返回-1-(其应该出现的位置),比如在0,6,9,15,18中找15,返回3 ...

  10. JAVA源码走读(二)二分查找与Arrays类

    给数组赋值:通过fill方法. 对数组排序:通过sort方法,按升序.比较数组:通过equals方法比较数组中元素值是否相等.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找 ...

随机推荐

  1. markdown生成的a标签如何在新页面打开

    原始的超链接语法这样写:[超链接的名字](url) 在新窗口中打开:[超链接的名字](url?_blank) 在本窗口中打开:[超链接的名字](url?_self)默认是在本窗口中打开 但上面的说法貌 ...

  2. nginx 配置详解(转)

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  3. 洛谷P2604 网络扩容 拆点+费用流

    原题链接 这题貌似比较水吧,最简单的拆点,直接上代码了. #include <bits/stdc++.h> using namespace std; #define N 1000 #def ...

  4. es6异步编程

    https://blog.csdn.net/tcy83/article/details/80274772 等一系列文章

  5. 30K iOS程序员的简述:如何快速进阶成为高级开发人员

    前言: 本篇文章适用于所有在这个行业已经有了几年时间后想要在职业生涯中取得突破的开发人员,编程人员和程序员(或者你可能刚刚开始,但希望你能看到你的路径) 本文适合那些有着简单愿望的人:你想成为一名高级 ...

  6. Linux安装Oracle JDK替换OpenJDK详解

    转自http://www.lsychina.com/howto_install_oracle-jdk_replace_openjdk_on_linux.html 众所周知,由于Oracle公司的JDK ...

  7. web故障排查常用命令

    整理总结了一些常用分析网站的命令方便大家快速定位故障所在排除故障,最小化的减少故障给业务带来的影响. 端口连接类 1.查看TCP连接状态 netstat -nat |awk '{print $6}'| ...

  8. 汇编语言笔记v1.0

    1.loop的用法 loop指令的格式是:loop标号,cpu执行loop指令的时候,要进行两步操作 1:(cx)=(cx)-1 2:判断cx中的值,不为零则转至标号处执行,如果为零,则向下执行 这里 ...

  9. :focus-within伪类选择器的3种应用

    1.点击form里任意input隐藏form以外内容提高用户体验 <form><input type="text"></form> form { ...

  10. centos 7.2 下 nginx 1.14.1 安装部署

    Nginx1.14.1安装部署 1.环境: 所有源码在跳板机kx的/web/soft下 2.安装依赖: [root@bogon src]# yum install -y libxml2 openssl ...