首页 > 其他分享 >SPOJ SP34020 ADAPET - Ada and Pet

SPOJ SP34020 ADAPET - Ada and Pet

时间:2023-01-07 06:22:19浏览次数:72  
标签:10 int Pet cin ADAPET SPOJ KMP

链接
难度:\(\texttt{13/19}\)


\(T\) 组数据。

你需要构造一个字符串满足其中包含 \(k\) 个给定的字符串 \(s\),输出该字符串的最短长度。

数据范围:\(k\le 10^6,\sum |s| \le 5 \times 10^5\)


KMP 熟练度考验?


先不考虑头尾相交的情况,若就是 \(k\) 个 \(s\) 拼在一起,答案为 \(k \times |s|\)。

接下来考虑首尾相交的情况,发现这种情况需满足前缀和后缀在给定长度下是相同的,便能由此想到 KMP 时求的 \(nxt\) 数组,因为仅会有 \(k-1\) 个相交部分,所以该部分减掉的贡献为 \((k-1)\times nxt_{|s|}\)。


// Problem: Ada and Pet
// Contest: SPOJ - Classical
// URL: https://www.spoj.com/problems/ADAPET/
// Memory Limit: 1536 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

# include <bits/stdc++.h>
using namespace std;
const int N = 500000;
int KMP [N + 10];
char s [N + 10];
int main () {
	ios :: sync_with_stdio (false);
	cin .tie (0);
	cout .tie (0);
	int t;
	cin >> t;
	while (t --) {
		cin >> (s + 1);
		int n = strlen (s + 1), k;
		cin >> k;
		for (int i = 2, j = 0; i <= n; ++ i) {
			while ((s [j + 1] ^ s [i]) && j) {
				j = KMP [j];
			}
			if (! (s [j + 1] ^ s [i])) {
				++ j;
			}
			KMP [i] = j;
		}// KMP 模板
		cout << 1LL * k * n - 1LL * (k - 1) * KMP [n] << '\n';// 注意这里 k * n 会爆 int 需开 LL
	}
	return 0;
}

标签:10,int,Pet,cin,ADAPET,SPOJ,KMP
From: https://www.cnblogs.com/lhzQAQ/p/17032077.html

相关文章

  • com.sun.tools.javac.code.TypeTags
    java:java.lang.ExceptionInInitializerErrorcom.sun.tools.javac.code.TypeTags   这个可能原因是你编译器的环境使用过高。但是你的依赖 <dependency>......
  • puppeteer(五)chrome启动参数列表API
    ListofChromiumCommandLineSwitches​​https://peter.sh/experiments/chromium-command-line-switches/​​Therearelotsofcommandlineswhichcanbeusedwith......
  • 洛谷 SP11414 / SPOJ COT3 Combat on a tree
    洛谷传送门SPOJ传送门考虑计算出以\(u\)为根的子树的\(\text{SG}\)值。在\(u\)子树内选择一个白点\(w\),将\(w\tou\)上的所有点删去,原树会变成森林,\(\text{S......
  • Kaggle——competition1 Titanic
    今天第一次跟着别人的Notebook顺着做了一下kaggle里面的入门比赛:预测泰坦尼克溺亡(虽然分数只有0.77...)发现很大一部分工作在于数据清洗这块,这一过程中也是认识到了很多新......
  • pyppeteer:比 selenium 更高效的爬虫利器
     API接口文档:APIReference:​​https://miyakogi.github.io/pyppeteer/reference.html​​pyppeteer github地址:​​https://github.com/miyakogi/pyppeteer​​pyppete......
  • puppeteer( Nodejs 版 selenium )快速入门
    puppeteer官网:​​https://pptr.dev/​​Puppeteer中文文档(与官Puppeteer中文文档 :​​https://learnku.com/docs/puppeteer/3.1.0​​Puppeteerv1.5.0中文翻peteer......
  • 《Le Petit Prince》随记 (《小王子》)
     你的玫瑰之所以如此宝贵,是因为你曾经为她花费了时间 我本以为当玫瑰说出我当然爱你没让你感受到是我的不对足以让小王子长久的委屈和误会都消散但是他还是......
  • vscode中输入``自动将光标后面一个单词选中,左右加入<w>和</w>标签 - snippets 的命令
    需求vscode中输入``自动将光标后面一个单词选中,左右加入和标签步骤0准备需要安装插件vim-这里的点击两次按键激活的快捷键,这个插件可以设置macros-一次执行多个命令的......
  • BUUCTF之[BJDCTF2020]BJD hamburger competition (复现)
    一个老八把我整不会了,看其他师傅的wp才知道,这个是C#和unity开发的游戏,所以我们用dnspy进行反编译下面是复现过程看到是unity程序,上网查了相关参考,一般是用js或者c#进行......
  • TB-PET揭示体内复杂的骨骼代谢网络
    论文题目:Asystem-levelanalysisofTotal-bodyPETdatarevealscomplexskeletalmetabolismnetworksinvivo笔记:陈亦新本文分析方法简单,不错的文章。introductionThe......