[第四场T4]Rima

2023-11-24 03:30
文章标签 第四场 t4 rima

本文主要是介绍[第四场T4]Rima,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

Adrian对单词押韵很感兴趣。如果两个单词的最长公共后缀的长度与两个单词中较长那个的长度一样,或者等于较长单词的长度减一,则这两个单词押韵。换句话说,如果A,B的最长公共后缀LCS(A,B)≥max(|A|,|B|)-1,则A和B押韵。

有一天,在阅读一套短篇小说时,他决定创造出能够使每两个相邻单词押韵的最长的单词序列,序列中的每个单词只能出现一次。但是Adrian已经厌倦了这个任务,所以他决定回去读小说,并要求你代替他解决这个任务。

输入

第一行输入包含整数N(1≤N≤5*1e5)。表示单词的个数。

接下来N行每行包含一个只由小写英文字母组成的字符串。表示可以用于组成序列的单词。数据保证每个单词都是不同的,保证所有单词的长度之和不超过3*1e6。

输出

输出一个整数。表示单词序列的最长长度。

解题思路

很明显倒着插入建立字典树。

然后呢?

算答案需要遍历一遍这棵树。

所以是一个树上DP,我们用DP[u]表示以编号u的节点结尾的单词后最多能接上的单词数量。

该节点对答案的贡献则就是两个最大的儿子的dp值加上剩余儿子的数量(必须要结束)。为啥要这样。而不是加上所有呢。

因为我们需要过渡,如果加上所有,那么是不能够让相邻的都保障押韵的。每一个字符串仅有一次机会使用。

可以自行画一下图,举一下例子,体会一下。

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int n,cnt = 1,color[1000005],ans;
int tree[1000005][26],dp[1000005];
char s[1000005];
void insert(char *s){//字典树int p = 0;int len = strlen(s + 1);for (int i = len;i >= 1;i --){int z = s[i] - 'a';if (!tree[p][z])tree[p][z] = ++ cnt;p = tree[p][z];}color[p] ++;
}
void dfs(int step){int tot = 0,max1 = 0,max2 = 0;if (color[step])dp[step] ++;for (int i = 0;i <= 25;i ++){//枚举int p = tree[step][i];if (p){dfs(p);if (dp[p] > max1){//最大max2 = max(max2,max1);max1 = dp[p];}else if (dp[p] > max2)//次大max2 = dp[p];tot +=color[p];//是结束了的子节点}}if (!color[step])//本身不结束,卵用没有dp[step] = 0;else dp[step] = max1 + max(1,tot);//最长单链,保证回溯无误ans = max(ans,max1 + max2 + color[step] + max(0,tot - 2));
}int main(){scanf ("%d",&n);for (int i = 1;i <= n;i ++){scanf ("%s",s + 1);insert(s);}dfs(0);printf("%d\n",ans);
}

 

这篇关于[第四场T4]Rima的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/421182

相关文章

CPC23第三场、第四场总结

这两天跟着Arthur学长们混了两天现场赛,有种打怪升级的感觉,就是90级的老大们带30级的我去打100级的BOSS,看着Arthur他们在不断的输出,我在一旁水经验·······不过我也没闲着玩泥巴,在status里留下了一大片WA、TLE、RE··········         CPC23第三场,开场19分钟,Arthur全场一A了C题,于是我就开始跟着切C题。看了一眼题目

第T4周:猴痘病识别

本文为🔗365天深度学习训练营 中的学习记录博客原作者:K同学啊 我的环境: ● 语言环境:Python3.6.5 ● 编译器:jupyter notebook ● 深度学习框架:TensorFlow 2.6.2 ● 数据:猴痘病数据集 一、前期工作 设置GPU(如果使用的是CPU可以忽略这步) from tensorflow import kerasfrom ten

2015ACM多校对抗赛第四场 hdu 5336

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5336 XYZ and Drops Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1024    Accepted Submissio

2015ACM多校对抗赛第四场 hdu 5335

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5335 Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2280    Accepted Submission(s):

2015ACM多校对抗赛第四场 hdu 5327

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5327 Olympiad Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 442    Accepted Submission(s):

林昊:用淘宝T4保障系统稳定性 降低运维成本

阿里巴巴高级技术专家林昊(腾讯科技配图) 腾讯科技讯 10月27日消息,2012全球软件开发大会(杭州站)进入第三天议程,阿里巴巴高级技术专家林昊在会上发表主题演讲,分享“T4:淘宝私有云”。 林昊介绍,淘宝在2011年开始引入虚拟化,引入以后,淘宝整个运维成本下降许多。他指出,许多企业运维成本不够低的主要原因包括:单台物理机上跑的应用不够多;分给应用的机型以及机器数是静态的;集群的

腾讯T4架构师用这12张手绘图,轻松带你搞懂微服务架构!太厉害了

微服务的概念最早在 2012 年提出,在 Martin Fowler 的大力推广下,微服务在 2014 年后得到了大力发展。今天我们通过一组手绘图来梳理下微服务的核心架构。   什么是微服务? 微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下: 就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise defin

西山居初赛第四场1001

叛逆的小明 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 81 Accepted Submission(s): 61 Problem Description 叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),

Nanopc T4 使用OpenCV

识别长方形:  import cv2import cv2 as cvimport timeimport platformimport os# 获取操作系统类型os_type = platform.system()if os_type == "Windows":# Windows系统cap = cv.VideoCapture(0) # 使用第零个摄像头elif os_type ==

【笔试题汇总】美团笔试题题解 第四场 2024.3.30

这里是paoxiaomo,一个现役ACMer,之后将会持续更新算法笔记系列以及笔试题题解系列 本文章面向想打ICPC/蓝桥杯/天梯赛等程序设计竞赛,以及各个大厂笔试的选手 感谢大家的订阅➕ 和 喜欢💗 有什么想看的算法专题可以私信博主 (本文题面由清隆学长收集) 01.K小姐的旅行预算计划 题目描述 K小姐计划去欧洲旅行,她的旅行预算总额为 k k k 欧元。旅行期间,她打算在交