SDUT OJ 2463 学密码学一定得学程序

#include<iostream>
#include<string.h>
#include<stdio.h>
#define N 10010
#define M 1000100
using namespace std;
int next[N];
char s[M],t[N];
void getnext(char s[])
{
    int i=0,j=-1,len;
	next[0]=-1;
	len=strlen(s);
	while(i<len)
	{
		if(j==-1 || s[i]==s[j])
		{
			i++;
			j++;
			if(s[i]!=s[j])
				next[i]=j;
			else
                next[i]=next[j];
		}
		else
			j=next[j];
	}
}
int KMP(char s[],char t[])
{
	int i=0,j=0,len,len1;
	len=strlen(s);
	len1=strlen(t);
	while(i<len && j<len1)
	{
		if(j==-1 || s[i]==t[j])
		{	i++;
		    j++;
		}
		else
			j=next[j];
	}
	if(j>=len1)  return i-len1+1;
	else   return 0;
}
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		cin>>s>>t;
	    getnext(t);
		int m=KMP(s,t);
		if(m)
			cout<<m<<endl;
		else
			cout<<"::>_<::"<<endl;
	}
	return 0;
}

时间: 2024-12-23 19:55:16

SDUT OJ 2463 学密码学一定得学程序的相关文章

SDUT 2463 学密码学一定得学程序

学密码学一定得学程序 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 曾经,ZYJ同学非常喜欢密码学.有一天,他发现了一个很长很长的字符串S1.他很好奇那代表着什么,于是神奇的WL给了他另一个字符串S2.但是很不幸的是,WL忘记跟他说是什么意思了.这个时候,ZYJ不得不求助与伟大的ZP.ZP笑了笑说,这个很神奇的,WL的意思是只要你找到她给你的字符串在那个神奇的字符串的位置,你就会有神奇的发现.ZYJ恍然大悟,原来如

学密码学一定得学程序

题目描述 曾经,ZYJ同学非常喜欢密码学.有一天,他发现了一个很长很长的字符串S1.他很好奇那代表着什么,于是神奇的WL给了他另一个字符串S2.但是很不幸的是,WL忘记跟他说是什么意思了.这个时候,ZYJ不得不求助与伟大的ZP.ZP笑了笑说,这个很神奇的,WL的意思是只要你找到她给你的字符串在那个神奇的字符串的位置,你就会有神奇的发现.ZYJ恍然大悟,原来如此,但是悲剧来了,他竟然不知道怎么找....是的,很囧是不是.所以这时候就需要化身为超级玛丽亚的你现身了,告诉他吧...... 输入 首先输

SDUT OJ 1704 数字统计问题

SDUT OJ 1704 数字统计问题 博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40930259 昨天晚上学弟问了OJ上这个题,群里说不清楚,就写个解题报告吧. 题目大意: 中文题目,就不翻译了-.- 解题思路: 不知道算不算一个典型的数位DP,反正有点那个意思,感觉确实也可以用记忆话搜索,两个差不多的意思. 我找了一下,这个问题好像是算法设计与实验题解上面的一道题,别的OJ上没有,所以就在自己OJ上做了. 大体的思路

SDUT OJ 3045 迷之图论 (树的直径)

题目地址:SDUT OJ 3045 这题比赛的时候想的差不多..但是总是觉得不对..写了一次就没再写,然后删了..当时没想到的是第二次求出来的就是最长链..当时想到的两次bfs找最大值(这一种方法其实结果也对..TAT..),还有找到点后在回溯减去重点等等..但总觉得好像都不太对...赛后才知道这题原来是树的直径.....牡丹江区域现场赛的时候遇到过,不过赛后也没看... 找树的直径的方法其实就是先任取一点进行bfs,找到最远的一点,这时最远的一点肯定是最长链端点之一,然后再从这一最远点开始bf

SDUT OJ -2892 A

A Time Limit: 60ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给出n(1<= n && n <= 2*10^6)个字符串,每个字符串只包含小写英文字母,且最多有五个.问这n个字符串中出现次数最多的有多少个. 输入 单组输入.第一行输入一个数字n,接下来n行,每行包含一个字符串. 输出 输出一个数字代表答案. 示例输入 5 aba abb w aba z 示例输出 2 提示 字段树,模板题 #include <iost

SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2-&gt;sqrt(n) 即可 )

亲和数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. 比如220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. 284的所有真约数和为: 1+2+4+71+142=220. 你的任务就编写一个程序,判断给定的两个数是否是亲和数. 输入 输入数据第一行包含一个数M,接下有M行,每行一个实例,

数据结构与算法问题 sdut oj 2144 最小生成树

题目描述 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的.现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市. 输入 输入包含多组数据,格式如下. 第一行包括两个整数n m,代表城市个数和可以修建的公路个数.(n<=100) 剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c. 输出 每组输出占一行,仅输出最小花费. 示例输入 3 2 1 2 1 1 3 1 示例输出 2 #include

NPL ( neuro-linguistic programmers 神经语言程序员) / ( Neuro-Linguistic Programming 神经语言程序学/身心语言程式学/ 神经语言程式学/ 神经语言程式)

Neuro-Linguistic Programmers 神经语言程序员 Neuro-Linguistic Programming  神经语言程序学/身心语言程式学/ 神经语言程式学/ 神经语言程式 NLP是神经语言程序学 (Neuro-Linguistic Programming) 的英文缩写.在香港,也有意译为身心语法程式学的.N (Neuro) 指的是神经系统,包括大脑和思维过程.L (Linguistic) 是指语言,更准确点说,是指从感觉信号的输入到构成意思的过程.P (Program

sdut oj 2059 简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 【模板】 )

简单n! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给定一个数n(0 <= n <= 150), 求0到n中所有数的阶乘. 输入 题目有多组数据,处理到文件结尾.输入一个数n. 输出 输出阶乘,形式如:4! = 24.每组数据输出后跟一个空行. 示例输入 1 4 示例输出 0! = 1 1! = 1 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 提示 代码: #include <stdi