学password学一定得学程序

题目描写叙述

以前。ZYJ同学非常喜欢password学。有一天,他发现了一个非常长非常长的字符串S1。他非常好奇那代表着什么,于是奇妙的WL给了他还有一个字符串S2。可是非常不幸的是,WL忘记跟他说是什么意思了。这个时候,ZYJ不得不求助与伟大的ZP。ZP笑了笑说,这个非常奇妙的,WL的意思是仅仅要你找到她给你的字符串在那个奇妙的字符串的位置,你就会有奇妙的发现。ZYJ恍然大悟,原来如此。可是悲剧来了,他居然不知道怎么找。

。。。是的。非常囧是不是。

所以这时候就须要化身为超级玛丽亚的你现身了,告诉他吧。

。。

输入

首先输入一个n。

表示有n组測试数据。

每组測试数据有两行。

第一行为字符串S1。长度不大于1000000。

第二行为字符串S2,长度不大于10000,而且长度不小于2。

输出

输出S2在S1的位置。

假设有多个位置,仅仅输出第一个位置。

假设找不到。就输出“::>_<::“(不输出双引號)。

演示样例输入

1
ASDFGDF
DF

演示样例输出

3

///由于字符串长度不是非常大。能够直接用字符串匹配的方法不会超时,所以方法有两种

方法一:

#include<stdio.h>
#include<string.h>
#define N 1000001
char s1[N],s2[10010];
int main()
{

int n;
scanf("%d",&n);
getchar();
while(n--)
{
gets(s1);
  gets(s2);
char *s3=strstr(s1,s2);
  if(s3==NULL)
  {
    printf("::>_<::\n");
  }
  else
  {
int    k=s3-s1+1;
    printf("%d\n",k);
  }

}

 return 0;
}

方法二:KMP算法

#include<stdio.h>
#include<string.h>
#define N 1000001
char s1[N],s2[10001];
int next[N];
void getnext()
{
  int i=0,j=-1;
  next[0]=-1;
  while(s2[i]!=‘\0‘)
  {
    if(j==-1 || s2[i]==s2[j])
    {
      i++;
      j++;
      next[i]=j;
    }
    else
     j=next[j];
  }
}
void KMP()
{
  int i=0,j=0;
  getnext();
  int len1=strlen(s1);
  int len2=strlen(s2);
  while(i<len1 && j<len2)
  {
    if(j==-1 || s1[i]==s2[j])
    {
     i++;
     j++;
    }
    else
    j=next[j];
  }
  if(j>=len2)
  {
    printf("%d\n",i-len2+1);
  }
  else
  {
    printf("::>_<::\n");
  }
}
int main()
{
  int n;
  scanf("%d",&n);
  getchar();
  while(n--)
  {
    gets(s1);
    gets(s2);
    KMP();
  }
  return 0;
}
时间: 2024-08-01 11:25:23

学password学一定得学程序的相关文章

学习用CMake来编写Qt程序

最近开始学习CMake,因为项目需求需要用到Qt,自带的qmake会出现许多问题(比如文件修改之后有时候qmake不会侦测到不会重新编译,需要手动去编译等),于是开始尝试使用CMake来编写Qt程序,顺便学习一下怎么用CMake来使用find_package,也算给自己一次学习的机会. 切入正题,CMake对于一些有名的库都有自带文件夹中Modules里.cmake文件查询的支持,比如你需要编写Qt程序,你就可以去cmake_dir/Moudles/查找 FindQt4.cmake这个文件,里面

C/C++要学什么东西?C/C++学完能干什么?学了又能当饭吃吗?

前言 普遍问题 学校的课程设计不完善,涉及面广,什么都不深入. 老师缺乏实际的工作经验,比如说我经常看到老师经常教学生做数学题之类的小程序,但是,实际工作中,我们并不玩这个. 在我看来,要学习某种编程语言,没必要去局限课堂,一方面是进度慢,另一方面,如果你要学习某种语言,关键在学而不在教,你的态度和决心是关键,只要你有决心,没人教也能学会,现在互联网这么发达,什么内容都可以找得到.但是,如果有人教,并且方法合适,肯定会快很多.好了说了这么多,先进入我们今天的主题:C/C++要学什么东西?C/C+

2019年入行IT学什么技术好?学java开发技术好不好

2019年入行IT学什么技术好?自IT行业超越金融行业,成为平均薪资收入高的行业,对IT行业产生向往之情的朋友是越发的多,很多朋友都在考虑学一门IT技术,但是苦恼比较多,学IT学什么技术好呢?现在火爆的IT技术还挺多的,从中挑一门IT技术学对于很多朋友来说是个难题. 2019年入行IT学什么技术好?学java开发技术好不好创一个小群,供大家学习交流聊天如果有对学java方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学java能够持之以恒java爱好群,如

转行学Java后悔吗?学Java到底有没有前途?

Java语言是目前全球最流行的开发语言,同时也是现在大多数的企业使用的开发语言,所以现在不少人想要转行学Java.毕竟转行是件大事,关乎一个人整个人生的职业规划,不少小伙伴可能会想问这样的问题:转行学Java后悔吗?学Java到底有没有前途?在这里小编想说转行学Java后不后悔,真的得结合自身情况,学Java本身还是很有前途的. 首先我们来看看Java的就业前景.我国目前对软件人才的需求已达20万并且以每年20%左右的速度增长,国家非常重视软件行业的发展.现在一般软件公司,大多需要java方面的

最大的幻术-游戏开发-到底是先学游戏引擎还是先学游戏编程

学习游戏的目的 我们学习游戏制作,游戏开发,游戏编程,游戏XX,我们的目的只有一个,打造一个非常牛逼,非常屌,非常让人开心的虚拟体验.我们用自己的学识让玩家在虚拟世界征战,生活,一步一步的让玩家幸福!那么我们的目的只有一个,让玩家知道自己的幸福在哪里,并且学会追求自己的幸福.当然,每个人对幸福的定义不一样.那么,我们只好让玩家来体验我们所来表达的最通俗的,最普遍的幸福体验,然后慢慢引导玩家去寻找自己的幸福体验.可能,在最后玩家都会离开游戏,离开虚拟世界,(对,这是真的,玩家需要一步一步达到定点,

50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名

查询学过"001"并且也学过编号"002"课程的同学的学号.姓名: 我的写法: 第一步:先查出来学过"001"并且也学过编号"002"课程的同学的学号: SELECT t11.t1sid t33id FROM (SELECT t1.StuId t1sid FROM tblscore t1 WHERE t1.CourseId='001')t11,-- 001的学生的id (SELECT t1.StuId t2sid FROM t

零基础学编程:零基础学HTML+CSS (第3版) 完整pdf扫描版

零基础学编程:零基础学HTML+CSS(第3版)站在零基础学习的角度,以通俗易懂的语言,结合丰富多彩的实例,来帮助初学者学习和掌握HTML语言和CSS样式设计.本书列举了大量的小型实例.综合实例,并包含3个项目案例,内容详尽.实例丰富.叙述清晰.本书主要分为四篇:第一篇为第1-9章,讲解了网页文字.字体.表格.段落.超级链接.图像.表单.框架.多媒体等技术:第二篇为第10-11章,对DIV+CSS的语法和相关属性进行了详细的解释和说明:第三篇为第12~20章,详细介绍了CSS的字体.文本.背景.

学java有前景吗 java程序员未来的三大就业方向

都说java专业非常火,但是学java毕业以后,能够从事哪方面的工作呢?学习java的程序员选择的就业方向比较广,但是选择难度也在加大.在3天一小变.5天一大变的IT行业中,如何才能决定职业方向呢?小编为大家列出几个方向,仅供大家参考: 开发方向 最近两年,智能手机爆炸式发展,其服务产业安卓开发也水涨船高,随之带动了培训行业的发展,安卓培训一路走红.目前,Android开发工程师已成为3G行业最炙手可热的岗位之一,初入行平均薪水4000元左右,有1年工作经验者月薪6000-8000元左右,2-3

《OD学微信开发》微信小程序入门示例

官网地址: https://mp.weixin.qq.com/debug/wxadoc/dev/ 一.文件结构 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. .js后缀的是脚本文件 .json后缀的文件是配置文件 .wxss后缀的是样式表文件 wxopen-002 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. app.js app.js是小程序的脚本代码.我们可以在这个文件中监听并处理小程序的生命周期函数.声明全局变量.调用框架提供的丰富的 AP