首页 > 其他分享 ># P4391 [BOI2009]Radio Transmission 无线传输 题解

# P4391 [BOI2009]Radio Transmission 无线传输 题解

时间:2023-04-01 17:12:56浏览次数:34  
标签:Transmission 题解 样例 int BOI2009 MAXN ull 字符串

[BOI2009]Radio Transmission 无线传输

题目描述

给你一个字符串 \(s_1\),它是由某个字符串 \(s_2\) 不断自我连接形成的(保证至少重复 \(2\) 次)。但是字符串 \(s_2\) 是不确定的,现在只想知道它的最短长度是多少。

输入格式

第一行一个整数 \(L\),表示给出字符串的长度。

第二行给出字符串 \(s_1\) 的一个子串,全由小写字母组成。

输出格式

仅一行,表示 \(s_2\) 的最短长度。

样例 #1

样例输入 #1

8
cabcabca

样例输出 #1

3

提示

样例输入输出 1 解释

对于样例,我们可以利用 \(\texttt{abc}\) 不断自我连接得到 \(\texttt{abcabcabc}\),读入的 \(\texttt{cabcabca}\),是它的子串。

规模与约定

对于全部的测试点,保证 \(1 < L \le 10^6\)。

简要声明

可使用 \(KMP\) 或者 \(hash\) 解决

瓶颈是判断区间相等

下面用一张图简要声明

image-20230401165236666

上下皆是 \(S\),每一列都相等,只需要判断橙色部分是否相同即可

\(\mathcal{Code}\)

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;

int n;

const ull BASE = 13331;
const int MAXN = 1e6 + 7;

ull H[MAXN], P[MAXN];

char S[MAXN];

inline ull get(int l, int r) {return H[r] - H[l - 1] * P[r - l + 1]; }

int main () {
	scanf("%d%s", &n, S + 1);
	P[0] = 1;
	for (int i = 1; i <= n; i ++) {
		H[i] = H[i - 1] * BASE + S[i];
		P[i] = P[i - 1] * BASE;
	}
	for (int i = 1; i <= n; i ++) {
		if (get(1 + i, n) == get(1, n - i))
			cout << i << "\n", exit(0);
	}
	return 0;
}

完结撒花✿✿ヽ(°▽°)ノ✿

标签:Transmission,题解,样例,int,BOI2009,MAXN,ull,字符串
From: https://www.cnblogs.com/Phrvth/p/17278919.html

相关文章

  • 4.1 模拟赛题解
    A一模一样讲过B先做一遍前缀和将区间和转成两数之差的形式。cdq分治,递归时排好序。按顺序枚举左端点,合法的右端点区间单调移动。CIDA*,容易发现每次翻转并不会打乱中间的铁盘,只会改变下边界的相邻关系。最终顺序相邻两个铁盘大小相差均为\(1\),所以估价函数设为已操作次数......
  • 使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决
    源码版本1、下载地址:https://github.com/spring-projects/spring-framework/tags2、选择要构建的源码版本并下载,例如:5.3.21相关环境1、操作系统:Windows102、JDK版本:Jdk173、IDE工具:IntelliJIDEA2021.3.34、项目构建工具:Gradle7.3.3使用IntelliJIDEA构建Spring......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)(CF1810)A~D题题解
    今天采用的是新格式。CF1810ABeautifulSequence点击查看原题点击查看思路如果一个数字的值\(v\),不大于当前的位置\(p\),那我们可以通过删除\(p-v\)个数字,使它们两个对应上。比如\([1,7,2,5,3]\)中的\(3\),其数值为\(3\),位置为\(5\),数值\(3\)小于等于\(......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!) A-D题解
    题目地址A-BeautifulSequence题意:给出一个数组,问是否存在任意一个子区间,存在i,使得ai=iSolution直接比较当前的数和i的大小就行了,当前为x,如果要求答案存在,必须有i>=xvoidsolve(){ intn;cin>>n; intflag=0; for(inti=1;i<=n;i++) { intx;cin>>x; if(i>=x) {......
  • Thinkpad T14升级Windows11ver22h2失败问题解决小记
    背景手头的ThinkPad在近一年的时间里每次升级Windows11的22h2版本每次都会报错,具体有以下几种情况:更新过程中无问题,重启后黑屏更新过程中会卡在26%左右,然后蓝屏报KENERAL_CHECK_FAIL,接着便自动重启进入修复程序在WindowsUpdate更新中报错0xC1900101在上述错误出现后,再次更......
  • 使用 wine 安装微信遇到的问题解决方法
    1.中文显示成方块添加启动环境变量:LANG=zh_CN.UTF-82.输入框不显示文字安装winetrickssudoaptinstallwinetricks#oryay-Sywinetricks然后安装riched20winetricksriched20......
  • 无所畏惧的求和题解
    无所畏惧的求和题解本题是本人目前出的题中难度最高的题。可能可以评一个黑?可能有点过,但是紫色是肯定可以的。题目链接:无所畏惧的求和-洛谷尽情享受吧!这道题其实做法有很多:待定系数法+矩阵求解推代数公式组合数学+待定系数法推组合公式第一类斯特林数(时......
  • Arduino 外接 DS3132 读数为2165/165/165问题解决
    即使SCL/SDA不接线,DS3132也会返回,这个值为2165/165/165因此问题的来源为接线不牢靠。接线牢靠的标准:RTC模块(ZS-042)上的PWR灯应该常亮,并且亮度很大(我一开始接线,PWR亮度小,而且闪烁)RTC的SCL接Arduino的A4,SDA接Arduino的A5.The165indicatesthatthedatalinefor......
  • CF629C题解
    CF629C这里更容易进入且有翻译题意给定长度为\(m\)的仅含(和)的字符串,为其左右补上两个字符串使其达到指定长度\(n\)且合法,需补足字符串合计长度\(n-m\)满足\(n-m\le2000\)。解析字符串合法条件为:左右括号总数相等;从左数起在任意位置上左括号数量不小......
  • [ARC128D] Neq Neq 题解
    不难考虑设\(f_i\)表示现在处理了前\(i\)个数,第\(i\)个数必选得到的方案数。由于\(a_n\)不可能被删掉(需要一个\(a_{n+1}\)),所以答案即为\(f_n\)。对\(f_i\),我们考虑前一个被保留的数\(j\),问题转化成被\(i,j\)夹住的一段连续的数可不可以全部删掉,分类讨论:\(j=i-1\)......