CHDU2014迎新杯比赛题解

A.神奇彩带

题意:给两个字符串 S 和 T ,让找一个最长的字符串 P 使得 P 是 S 的前缀且是 T 的后缀。

思路:考虑 KMP 算法中的 Next 数组即为所求。只需要在 S 和 T 之间用一个无效的字符连接起来,求其 Next 数组,Next[len] 即为答案。

推荐学习链接:

  从头到尾彻底理解 KMP 算法

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std ;
 7
 8 void nnnxt(char s[],int nxt[])
 9 {
10     memset(nxt,0,sizeof(nxt)) ;
11     int i = 0 , j = -1 , len = strlen(s) ;
12     nxt[0] = -1 ;
13     while (i < len) {
14         while (j != -1 && s[i] != s[j]) j = nxt[j] ;
15         nxt[++i] = ++ j ;
16     }
17 }
18
19 char s[100010] , t[50010] ;
20 int nxt[100010] ;
21
22 int main()
23 {
24     freopen("1.in","r",stdin) ;
25     //freopen("hehe.out","w",stdout) ;
26     while (~scanf("%s%s",s,t)) {
27         strcat(s,"#") ;
28         strcat(s,t) ;
29         nnnxt(s,nxt) ;
30         printf("%d\n",nxt[strlen(s)]) ;
31     }
32     return 0 ;
33 }

A.神奇彩带

~end~~_~

时间: 2024-08-07 08:09:54

CHDU2014迎新杯比赛题解的相关文章

[比赛题解]CWOI2019-1

[比赛题解]CWOI2019-1 比赛日期:2019.10.12 T1 一道神仙DP题. 我们考虑\(dp[i][j][k]\)表示最后\(i\)位数,\(i-1\)位都是9,最后一位为\(j\),最后\(i\)位数以前的部分最大数为\(k\)时,把最后\(i\)位数减到负数最小需要多少次.\(re[i][j][k]\)代表这个状态下,把这个数减到负数时,负数+10的值. 那么每次操作就会减去\(min(最后i位数中最小值,k)\). 我们先预处理出\(dp\)和\(re\)数组(从低位向高位递

【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

cf的比赛越来越有难度了--至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航,它们又是否会破灭呢?" 给定一个长度为n的序列.确定能不能将序列分成奇数个长度为奇数的非空字串,而且这其中每个子串以奇数开头,以奇数结尾.可以只分成一个(1也是奇数). 输入 第一行一个正整数n,表示序列长度. 第二行n个整数,表示序列中的元素. 输出 输出"Yes"或"

【学长出题】【比赛题解】17-09-29

此次比赛由dalao学长@FallDream出题,欢迎查看他的blog! [T1] 题意: 样例: (1<=n<=100000, 1<=xi,yi<=10^9) 题解: 加一个骨牌,就相当于把最后的若干个骨牌删除,再算之前的答案. 如果我们对任意的前i个骨牌算出答案,就可以简单地算出最终答案. 就有了dp的想法,可以发现是比较简单的. f[i]=f[k]+(i-k),k是i推倒后最后一个没有被推倒的骨牌编号. 1 #include<cstdio> 2 #include&

机器人巡线板-合泰杯比赛项目

合泰杯项目-机器人巡线板 项目负责人:叶鹏程 队员:廖俊强.杨泽才 项目内容 这个项目本来团队已经用STC8单片机作出了一款模块,已经受住考验,报合泰杯的时候我打算把程序移植到合泰芯片上去就可以了.然鹅.比赛准备期间都去忙别的了,所以只剩下比赛前一周才开始准备比赛,我主要绘制了一块新的PCB用于制作含春时合泰芯片的循迹板. 然后使用一周的时间来学习合泰单片机的相关内容. 学习之路上遇到了许多bug,其实我觉得还是不要用合泰单片机比赛了,由于报名时候的失误,我分配到了ht66f70的芯片,这颗芯片

【codeforces】【比赛题解】#854 CF Round #433 (Div.2)

cf一如既往挺丧 看丧题点我! [A]分数 Petya是数学迷,特别是有关于分数的数学.最近他学了所谓一个分数被叫做"真分数"当且仅当其分子小于分母,而一个分数被叫做"最简分数"当且仅当其分子分母互质.在闲暇时间,Petya在用计算器研究:如何把最简真分数转换为小数等问题.有一天他不小心把除号(÷)按成了加号(+),导致他得到了分子与分母的和.Petya想要得到他原来的分数,但他很快发现这不是唯一的.所以现在他想要知道最大的最简真分数使得其分子与分母的和为n. 输入

2015,6月 嘉杰信息杯比赛总结

这大概是我第一次写比赛总结吧,以前看见总结类的东西都是想各种办法偷懒,但可能是憋得太久,想说的话太多太多:先说比赛总结吧. acm这之路一年来参加过大大小小很多场比赛:除去校级比赛和友谊赛不算,之前拿过最大的奖就是省赛的三等了.这次 中国大学生程序设计比赛-湖南 拿银可以说是让我等了太久(我不会说我做梦都在拿银0.0). 第一次看到赛队名单是在比赛的前两天,当时就把我看懵了,不是说好的湖南邀请赛吗,怎么各路大神都来了orz,各种脑补被虐场景..更多的是对那些强校名字的恐惧.好吧刷两道题稳点一下情

【比赛题解】03-25生日赛

03-25是小兔的生日-- 这一周是我出题--三道题的难度是 T1<T2<T3 [T1]过生日 其中3<=n,m<=1500 [T2]方程狂魔 其实质数个数是664579个-- [T3]监视 求图的最小生成树,然后天天爱跑步就好.为什么是最小生成树?因为每个小伙伴只会走路径上最大权最小的.先考虑走的边一定是树边:把这个图MST之后,对于一条树上路径,把路径换成另一条非树上路径,结果一定不会更优.因为另一条路径上的最大权值一定没有当前路径上的最大权值更大.而又因为树上权值互异,所以M

14-15西南交通大学ACM新秀杯初赛题解J

Problem A Dull DongGua 撰写:Hacker_vision 题目大意:n个数1,2,3,4--,n;给你每个数的出现次数,判断是否存在这n个数构成的序列满足相邻元素两两互异. 题解: 组合数学中的插空,可以证明只要出现次数最多的那个元素能够剩下所有元素分隔开即可(构成的空能被插满) #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #

【codeforces】【比赛题解】#915 Educational CF Round 36

虽然最近打了很多场CF,也涨了很多分,但是好久没写CF的题解了. 前几次刚刚紫名的CF,太伤感情了,一下子就掉下来了,不懂你们Div.1. 珂学的那场我只做了第一题--悲伤. 这次的Educational Round打的还可以,虽然吧没有涨分(因为我是紫色的啊). 做了前4题,后面3题也比较简单,陆续也做完了. 所以心情好,来写一篇题解! [A]花园 题意: 长度为\(k\)的线段,用若干个长度为\(a_i\)的线段,正好覆盖.(\(a_i|k\)) 给定\(n\)个\(a_i\),求出最小的\