首页 > 其他分享 >UVA12467 Secret Word 题解

UVA12467 Secret Word 题解

时间:2024-02-13 18:22:26浏览次数:26  
标签:nxt s2 UVA12467 题解 1000002 long Secret ans define

题目传送门

前置知识

前缀函数与 KMP 算法

解法

考虑将 \(S\) 翻转后得到 \(S'\),然后就转化为求 \(S'\) 的一个最长子串使得其是 \(S\) 的前缀。使用 KMP 求解即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
int nxt[1000002];
char s1[1000002],s2[1000002];
int main()
{
	int t,n,ans,i,j,k;
	cin>>t;
	for(k=1;k<=t;k++)
	{
		cin>>(s2+1);
		n=strlen(s2+1);
		ans=0;
		for(i=1;i<=n;i++)
		{
			s1[i]=s2[n-i+1];
		}
		for(i=2,nxt[1]=j=0;i<=n;i++)
		{
			while(j>=1&&s2[i]!=s2[j+1])
			{
				j=nxt[j];
			}
			j+=(s2[i]==s2[j+1]);
			nxt[i]=j;
		}
		for(i=1,j=0;i<=n;i++)
		{
			while(j>=1&&(j==n||s1[i]!=s2[j+1]))
			{
				j=nxt[j];
			}
			j+=(s1[i]==s2[j+1]);
			ans=max(ans,j);
			if(j==n)
			{
				j=nxt[n];
			}
		}
		for(i=ans;i>=1;i--)
		{
			cout<<s2[i];
		}
		cout<<endl;
	}
	return 0;
}

标签:nxt,s2,UVA12467,题解,1000002,long,Secret,ans,define
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18014696

相关文章

  • WGOI R1 真夏飞焰 题解.18014664
    【题目大意】给定序列\(a\),我们定义序列\(a,b\)是「\(k\)相似」的,当且仅当对于\(a\)中每一个四元组\((l_1,r_1,l_2,r_2)\),若满足\(r_1-l_1+1=r_2-l_2+1\lek,l_2=r_1+1,a_{l_1\ldotsr_1}=a_{l_2\ldotsr_2}\),则有\(b_{l_1\ldotsr_1}=b_{l_2\ldot......
  • CF609D题解
    Gadgetsfordollarsandpounds题目传送门题解给一个单\(\log\)题解。“求最早完成买\(k\)样东西的天数。”——很明显的二分答案。在检验函数中,我们应当把前\(k\)小的物品费用之和与总金额作比较,其它题解大多使用直接排序的方法,于是就多了一只\(\log\)。其实没有必......
  • P4559 [JSOI2018] 列队 题解
    题目链接:列队半年前mark的题,结果现在一下子就会做了。顺便写写我的手玩过程和复杂度说明。考虑比较特殊的情况:比较特殊的,发现从黑色到红色区间我们无论咋选择,由于\(\left|a_{right}-a_{left}\right|\),这玩意如果\(right\)表示红色的一边,那么这个绝对值可以直接拆掉,那么......
  • [ARC171E] Rookhopper's Tour 题解
    题目链接首先把\(m=2\)和\(m\)为奇数的情况判掉,由于我们要对合法的摆放方案计数,而一个摆放方案要判断合法性就必须通过一组合法的移动过程,对移动的状态进行记录以此转移和优化显然没啥前途,因此我们考虑摆放方案和移动过程之间的联系。一个比较显然的观察是摆放方案和移动过......
  • 2024牛客寒假算法基础集训营2个人补题题解(K、D)
    比赛链接:2024牛客寒假算法基础集训营2K、TokitsukazeandPassword(easy)题面看着很难实际上只要暴力的东西,赛时看了眼题面就溜了血亏爆搜,枚举\(abcd\)和_可能的值,枚举的情况只有\(9*8*7*6*9=27216\)种。判断按照枚举出的对应值排列出的密码是否满足条件,满足就\(ans++\)写完......
  • Atcoder Educational DP Contest 题解
    比赛链接:Atcoderr或者题单A:Frog1常规线性dp,注意到对于每个落点来说,青蛙只能由第\(i-1\)个石头或者第\(i-2\)个石头转移得到,那么我们让\(dp[i]\)为当跳到第\(i\)个石头上的最小费用。此时显然有:\[dp_i=\min(dp_{i-1}+\left|h_i-h_{i-1}\right|,dp_{i-2}+\left|h_......
  • JOISC 2018 题解
    JOISC2018loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1简单题。根据颜色段均摊的结论,每个点到根的路径上颜色段的总和是\(O(n\logn)\)的,于是直接每次暴力找颜色段即可。复杂度\(O(n\log^2n)\)。提交记录D1T2又是计算几何。我们需要画出一条闭合折线,并且......
  • JOISC 2017 题解
    JOISC2017loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1开场放大。首先,对于一个点,它最后覆盖的一定是一个矩形,这就意味着如果我们知道了\(u,d,l,r\)操作各用了多少次,他们之间的顺序是不重要的,我们可以直接当做把一种操作做完再做剩下的操作,这样就可以做到\(O(......
  • JOISC 2016 题解
    JOISC2016loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1一开始把题目看错了,还写了棵线段树。把询问离线,倒着扫一遍,就变成了求最长不上升子序列,用树状数组维护即可。提交记录D1T2来自Kubic的神仙做法。考虑Filp一个位置和剩下所有位置,记录每个数作为答案......
  • JOISC 2015 题解
    JOISC2015loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1简单题。因为\(k\)很小,考虑依次确定最后第\(i\)位是什么。我们倒序考虑所有操作,维护最后第\(i\)位当前在第几位,就可以一直推下去。提交记录D1T2直接暴力复杂度就是\(O(k4^k)\)的,可以通过。提交......