【洛谷P1368】工艺【最小表示法】

P1368 【模板】最小表示法【双指针】 最小的循环同构串 当字符串S中选定一个位置i满足S[i-n]+S[1-i-1]=T,则T是S的循环同构串。设S=“bcad",其循环同构串有“bcad”、“cadb"、“adbc”、“dbca”,当i=3时,得到字典序最小的循环同构串是“adbc"。最小表示法就是找出字符串S的循环同构串中字典序最小的那一个。 对于循环串(或环),通常的技巧就是复制一倍,破环成链,然后扫描。 用三个变量指针控制扫描,指针i,j控制匹配起始位置,指针k控制匹配长度。算法流程 1.把字符串复制一倍 2.初始化指针i=1,j=2, 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P1368
求一个数字串的最小表示法。


思路:

最小表示法模板题其实是我不会SAM
最小表示法,顾名思义,就是一个数列,把它看成一个环,在不改变它顺序的情况下的字典序。
不多解释了,看代码吧。


代码:

#include <cstdio>
#include <algorithm> 
using namespace std;

int n,a[10000005],i,j,k;

int main()
{
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		a[i+n]=a[i];  //复制一遍,防止越界
	} 
	i=1; j=2;   //初始化
	while (i<=n&&j<=n)
	{
		for (k=0;k<=n;k++)  //枚举相同位数
		 if (a[i+k]!=a[j+k]) break;  //不相同就退出
		if (k==n) break;  //全部相同
		if (a[i+k]>a[j+k])  //找到更小的表示方法
		{
			i=i+k+1;
			if (i==j) i++;
		}
		else  //否则
		{
			j=j+k+1;
			if (i==j) j++;
		}
	}
	for (k=min(i,j);k<min(i,j)+n;k++) 
	 printf("%d ",a[k]);
	return 0;
}
最小表示法 周源经典最小表示解释,我目前为止看到最好的讲解最小表示法的文档 立即下载

相关推荐

最小表示法 ioi2003 周源

最小表示法 ioi2003 周源

最小表示法——算法解析

当一个字符串形成一个环的时候,要比较两个字符串是否相同就会变得很困难,因为你不知道对于第二个字符串来说,以哪个字符开始比较才会和第一个字符串相同。所以我们就会想到枚举起点比较是否相同,而这样的复杂度是O(n2)。而这种算法可以在O(n)的时间解决这个问题。下面介绍一下最小表示法。...

风中的微尘的博客 2019

当爬虫遇到TikTok滑块:一份给开发者的verifyV2避坑指南与调试心得

本文详细解析了TikTok滑块验证码verifyV2的破解与优化策略,涵盖验证码触发机制、滑块图片获取、验证请求构造及高级调试技巧。通过实战案例和代码示例,帮助开发者有效应对复杂反爬机制,提升验证通过率。特别针对verifyV2系统的加密算法和轨迹模拟提供了专业解决方案。

weixin_30919429的博客 641

【最小表示法】【字符串】

最小表示法 1️⃣ 简介 最小表示法就是找 字符串S的循环同构串中字典序最小的一个 的算法,属于是字符串算法。 循环同构串: 例子:字符串S : bcad, 则S的循环同构串为bcad, cadb, adbc, dbca 故循环同构串可以有多个,它是原字符串循环移位产生的字符串 2️⃣ 实现方法 最小表示法其实就是找到位置i,从这个位置输出S,使得到的同构串字典序最小。 可以参考的链接: https://oi-wiki.org/string/minimal-string/ 暴力解法 关键是如何找:需

行码棋 1275

RK3588设备树调试实战:解决NPU不加载、USB3.0识别异常与DP显示问题

本文深入探讨了RK3588设备树调试中的三大典型问题:NPU不加载、USB3.0识别异常与DP显示问题。通过详细的问题定位步骤、关键设备树修改和调试技巧,帮助开发者快速解决硬件适配中的挑战,提升RK3588平台的开发效率。

weixin_30576827的博客 474

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6387

【代码超详解】洛谷 P1368 工艺 /【模板】最小表示法

一、题目描述 二、算法分析说明与代码编写指导 三、AC 代码 #include<cstdio> #include<algorithm> #pragma warning(disable:4996) using namespace std; unsigned n, f[300000]; template<class _Ty> inline size_t mine...

COFACTOR 273

从零开始的 AI Infra 学习之路

AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。

AI Infra / LLM / 软件开发 3万+

【最小表示法】洛谷P1368 工艺

链接 https://www.luogu.org/problemnew/show/P1368 大意 给定一个断的但必须要按一定数序的数组求其最小表示 思路 最小表示法裸题,当然你可以用SAMSAMSAM 代码 #include&lt;cstdio&gt; #include&lt;algorithm&gt; using namespace std;int n,a[300...

Ajwallet 418

【华为OD机试真题】7、字符串筛选排序 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母(k>=1) 输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引 如果有重复字母则输出字母的最小位置索引

KJ.JK 2266

基于DWA算法的机器人动态避障技术实现及matlab代码

DWA算法是一种基于轨迹的运动规划算法,其核心思想是:在机器人当前位置及速度的基础上,结合机器人感知到的环境信息,生成一组合法的速度指令,然后从这组速度指令中选取代价最小的速度指令作为机器人的下一步操作。下面,我们将通过一个实例来演示基于DWA算法的机器人动态避障技术实现。假设机器人在一个宽敞的场地内行驶,但场地内有一些固定障碍物和移动障碍物,机器人需要避开这些障碍物,并在场地内自由移动。本文给出了一种基于DWA算法的机器人动态避障技术实现及相应的matlab代码,读者可以根据自身需求进行修改和调整。

uote_e的博客 1001

LuoGu P1368 工艺

LuoGu P1368 工艺 最小表示法的板子题.这个题可以用\(n\:log_2\:n\)的\(SA\)求最小表示法也可以用更加优秀的\(O(n)\)的\(two\:pointers.\) \(SA\)不讲,因为会\(SA\)的人应该都能一眼看出来怎么做.主要讲\(two\:pointers\)求出最小表示法. 具体思想是先把字符串加倍,然后用两个指针,它们的初始位置相差\(1\). ...

weixin_30379531的博客 99

如何使用 Conda 安装 Qiskit(详细教程)

本文介绍了使用conda安装Qiskit量子计算工具包的完整流程。首先创建Python 3.10的conda虚拟环境(qiskit_env),然后安装Qiskit核心包及可视化组件(注意Mac用户的安装命令差异)。接着注册IPython内核并测试环境,通过量子电路创建与可视化演示验证安装成功。该教程为量子计算开发提供了简洁的环境配置指南,适合研究者和开发者快速搭建Qiskit开发环境。

猿小白的博客 563

最小表示法模板(洛谷P1368 工艺)(最小表示法)

洛谷题目传送门 最小表示是指一个字符串通过循环位移变换(第一个移到最后一个)所能得到的字典序最小的字符串。 因为是环状的,所以肯定要先转化为序列,把原串倍长。 设决策点为一个表示法的开头。比较两个决策点\(i,j\),找到它们的LCP(假设长度为\(k\))。 假设\(s_{i+k}>s_{j+k}\),那么显然决策\(s_{i...i+k}\)是分别不优于决策\(s_{j...j...

a83229442的博客 252

Test软件:Keysight二次开发_(3).安装与配置开发环境

在开始进行Keysight软件的二次开发之前,首先需要确保您的开发环境已经正确安装和配置。本节将详细介绍如何安装和配置必要的开发工具和依赖项,以便您能够顺利进行开发工作。

2401_87715305的博客 1413

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

洛谷P1368工艺(最小表示法/后缀自动机)

        小敏和小燕是一对好朋友。他们正在玩一种神奇的游戏,叫Minecraft。他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮。两个工艺品美观的比较方法是,从头开始比较,如果第i个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第i+1个方...

Karshilov的博客 490

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2018.07.17 洛谷P1368 工艺(最小表示法)

传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现。 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头尾。然后开始逐位比较,当两个字串同一位置的字符不同时,相对来说字符值较大的指针跳到失配下标的后面一位,如果此时两个指针重合,将其中一个加一。边界条件:两个指针中有一个值大于原数组长度。 代码如下...

苟为蒟蒻又何妨 208

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【洛谷 P1368】最小表示法[模板]

题目描述 题目 小敏和小燕是一对好朋友。 他们正在玩一种神奇的游戏,叫 MinecraftMinecraftMinecraft。 他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。 他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮。 两个工艺品美观的比较方法是,从头开始比较,如果第 i 个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第 i+1 个方块。如果全都一样,那么这两个工艺品就一样漂亮。 输入格式

绫 282

[luogu 1368] 工艺{最小表示法}

题目 https://www.luogu.org/problemnew/show/P1368#sub 解题思路 求最小表示法。 代码 #include&amp;amp;lt;cstdio&amp;amp;gt; #include&amp;amp;lt;algorithm&amp;amp;gt; using namespace std; int n,a[600010],ans; int main() {

Nowed 526

【洛谷 P1368】 【最小表示法】最小表示法

题目描述 小敏和小燕是一对好朋友。 他们正在玩一种神奇的游戏,叫 MinecraftMinecraftMinecraft。 他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。 他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮。 两个工艺品美观的比较方法是,从头开始比较,如果第 iii 个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第 i+1i+1i+1个方块。如果全都一样,那么这两个工艺品就一样漂亮。

在人间贩卖声音 226

洛谷 P1368 工艺 后缀自动机 求最小表示

洛谷 P1368 工艺 后缀自动机 求最小表示 后缀自动机沙茶题 将字符串复制一次,建立后缀自动机. 在后缀自动机上贪心走 $n$ 次即可. Code: #include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;cstring&gt; #include &lt;map&gt; ...

EM LGH 216

【洛谷】P1368 【模板】最小表示法

https://www.luogu.com.cn/problem/P1368题目描述: 小敏和小燕是一对好朋友。他们正在玩一种神奇的游戏,叫Minecraft。他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮。两个工艺品美观的比较方法是,从头开始比较,如果第iii个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第i+1i+1i+1个方块。如果全都一样,那么这

数学、算法爱好者的博客 602
上一篇: 【POJ 1961】Period【KMP】
下一篇: 【CODEVS 2185】最长公共上升子序列【DP】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值