【NOIP2012模拟8.20】Memory

题目

话说某一天,CD在爬树的时候发现了树干上有一大串奇怪的符文,于是好奇的CD就从头到尾看了一遍。看完一遍以后CD觉得,最后一段文字好像很眼熟,好像在前面见过。对于CD来说,一开始看到的符文会印象特别深刻,而且这段符文要出现多次,CD才会觉得眼熟。
其实现在就是,CD会告诉你他看到的符文具体是什么,你要告诉CD,这段符文里最长的既是前缀又是后缀还在中间某个地方出现过(非前缀非后缀的出现)的最长的子串是什么。

分析

研究了一下kmp,发现
\(next\)数组表示在字符串\(s\)中,\(s[1...next_{j}]=s[j-next_{j}+1...j]\)
那么,在kmp中如果出现了j,就表示\(s[1...j]\)一定在中间出现过(因为是中间,所以j!=n),用标记数组bz记录下来。
接着就要判断后缀是否在前面出现就可以啦,细节自己研究。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=1010000;
using namespace std;
int next[N]={0},n;
bool bz[N]={0};
char s[N];
int main()
{
    freopen("2964.in","r",stdin);
    freopen("2964.out","w",stdout);
    scanf("%s\n",s+1);
    n=strlen(s+1);
    int j=0;
    for(int i=2;i<=n;i++)
    {
        while(j && s[j+1]!=s[i]) j=next[j];
        if(s[j+1]==s[i]) j++;
        next[i]=j;
        if(i!=n) bz[j]=true;
    }
    while(j && !bz[j]) j=next[j];
    if(bz[j])
        for(int i=1;i<=j;i++) printf("%c",s[i]);
            else
                printf("CD can't remember anything.");
}

原文地址:https://www.cnblogs.com/chen1352/p/9043443.html

时间: 2024-08-02 19:27:00

【NOIP2012模拟8.20】Memory的相关文章

Cisco PT模拟实验(20) 通过TFTP协议备份、恢复配置或系统升级

Cisco PT模拟实验(20) 通过TFTP协议备份.恢复配置或系统升级 实验目的: 掌握TFTP方式备份.恢复配置文件的基本命令 掌握TFTP上传IOS文件并升级系统的方法 熟悉TFTP协议文件传输的原理 实验背景: 交换机.路由器等网络设备内的用户配置是网络得以正常运行的重要保证,也是网络维护管理的重要内容,在复杂的网络中,网络设备配置往往比较复杂,一旦用户配置丢失,要用手工恢复不仅工作量相当大,而且容易出错.现在要求利用TFTP协议在完成路由器配置后进行配置备份,并向一台路由器上传IOS

2-09. 装箱问题模拟(20) (ZJUPAT 模拟)

题目链接:http://pat.zju.edu.cn/contests/ds/2-09 假设有N项物品,大小分别为s1, s2, -, si, -, sN,其中si为满足1<= si<=100的整数.要把这些物品装入到容量为100的一批箱子(序号1-N)中.装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中.请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目. 输入格式说明: 输入第1行给出物品个数N(<=1000),

NOIP2012模拟试题【奶牛晒衣服】

1.奶牛晒衣服(dry) [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任.洗完衣服后,你就要弄干衣服.衣服在自然条件下用1的时间可以晒干A点湿度.抠门的熊大妈买了1台烘衣机.使用烘衣机可以让你用1的时间使1件衣服除开自然晒干的A点湿度外,还可烘干B点湿度,但在1的时间内只能对1件衣服使用. N件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服

NOIP2012模拟试题 121105【奶牛排队(tahort)

3.奶牛排队(tahort) [ 问题描述] 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同…… 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,中间如果存在奶牛,则身高不能和A.B奶牛相同.问这样的奶牛最多会有多少头? 从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0,2,但不会是1). [输入] 第一行一个数N (2≤N≤l00000),表示奶牛的头数. 接下来N个数,每行一个数,从上到下

[jzoj]2938.【NOIP2012模拟8.9】分割田地

Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分给这些儿子.分给每个儿子的土地最小的单位是一个栅格,同时,分给同一个儿子的土地要求要相邻连续的.地主觉得分给某个儿子的土地面积至少有一个栅格,但是具体多少可以随意. 请问,聪明的你,能够算出地主一共有多少种分土地的方法吗?也就是说要求把2*n的栅格分成k个连通区域,每个区域至少有一个栅格. Solu

【NOIP2012模拟10.25】旅行

题目 给定一个n行m列的字符矩阵,'.'代表空地,'X'代表障碍.移动的规则是:每秒钟以上下左右四个方向之一移动一格,不能进入障碍. 计算:在空地中随机选择起点和终点(可以重合,此时最短耗时为0),从起点移动到终点最短耗时的平均值. 每一行每一列至多有1个障碍,并且障碍不在对角线方向相邻.以下矩阵是不合法的: .X X. 分析 50%的数据,全都是空地,答案就是所有两点间的曼哈顿距离和. 很容易求,\({第i行空地的数量}*{第j行空地的数量}*|i-j|*2\) 因为每一行每一列至多有1个障碍

CodeForces - 200DProgramming Language纯模拟

CodeForces - 200D Programming Language Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status Description Recently, Valery have come across an entirely new programming language. Most of all the language attracted h

20160917NOIP模拟赛?(?&gt;?&lt;?)?

T1:寻找(find) [题目描述] 你有一个长度为n个由abc三个字母组成的字符串s,你现在想知道有多少三元组(i,j,k)满足: 1. s[i]='a',s[j]='b',s[k]='c' 2. j^2=ik 请你求出满足条件的三元组的数量 [输入描述] 第一行为n,表示字符串长度 第二行为一个长度为n的字符串. [输出描述] 输出一个数, 表示满足条件的三元组的数量. [样例] 输入 输出 5 abccc 1 [数据范围] 对于30%的数据, 对于50%的数据, 对于70%的数据, 对于1

【转载:20个linux管理命令】linux专家常用命令

接下来呢?在这篇文章中我将解释管理 Linux 服务器所需的一些命令. 1. 命令: ifconfig ifconfig用来配置常驻内核的网络接口信息.在系统启动必要时用来设置网络适配器的信息.之后,它通常是只需要在调试时或当系统需要调整时使用. 检查活动网络适配器 [[email protected] ~]$ ifconfig eth0      Link encap:Ethernet  HWaddr 40:2C:F4:EA:CF:0E inet addr:192.168.1.3  Bcast