[BZOJ]3238 差异 后缀树

别再死记硬背了!用Multisim仿真5分钟搞懂运放电压跟随器到底要不要加反馈电阻 本文通过Multisim仿真实验,深入解析运放电压跟随器中反馈电阻的必要性。实验对比不同阻值对电路性能的影响,揭示反馈电阻在提供偏置电流通路、提升高频稳定性和ESD保护中的关键作用,并给出工程实践中的优化建议,帮助工程师快速掌握运放电路设计要点。 阅读详情

3238: [Ahoi2013]差异

Time Limit: 20 Sec   Memory Limit: 512 MB
Submit: 3905   Solved: 1762
[ Submit][ Status][ Discuss]

Description

Input

一行,一个字符串S

Output

 

一行,一个整数,表示所求值

Sample Input

cacao

Sample Output


54

HINT



2<=N<=500000,S由小写英文字母组成

Source

[ Submit][ Status][ Discuss]


HOME Back

  今天顺便看了下后缀树是什么玩意儿... 明白了原来就是反串的parent树?

  这道题对反串建后缀自动机, 求出后缀树后, 两个后缀在后缀树上的lca的长度就是lcp, 那么dfs一遍就知道每个点被贡献了多少次... 就可以统计答案了.

  其实没必要dfs直接基数排序一下就好了.

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 5;
int n;
char ss[maxn];
struct Suffix_Automaton {
    long long ans;
    int tot, last, root;
    int cnt[maxn], sa[maxn << 1];
    int siz[maxn << 1], c[maxn << 1][26], par[maxn << 1], len[maxn << 1];
    inline void init() {
        tot = 0;
        root = last = ++ tot;
    }
    inline void insert(int idx) {
        int p = last, np = last = ++ tot;
        len[np] = len[p] + 1, siz[np] = 1;
        while (p && !c[p][idx]) c[p][idx] = np, p = par[p];
        if (!p) par[np] = root;
        else {
            int q = c[p][idx];
            if (len[q] == len[p] + 1) par[np] = q;
            else {
                int nq = ++ tot;
                len[nq] = len[p] + 1, par[nq] = par[q];
                memcpy(c[nq], c[q], sizeof(c[q]));
                par[np] = par[q] = nq;
                while (c[p][idx] == q) c[p][idx] = nq, p = par[p];
            }
        }
    }
    inline void Radix_sort() {
        for (register int i = 1; i <= tot; ++ i) cnt[len[i]] ++;
        for (register int i = 1; i <= n; ++ i) cnt[i] += cnt[i - 1];
        for (register int i = 1; i <= tot; ++ i) sa[cnt[len[i]] --] = i; 
    }
    inline long long solve() {
        Radix_sort();
        for (register int i = tot; i > 1; -- i) {
            int nw = sa[i];
            ans += 1ll * len[par[nw]] * siz[par[nw]] * siz[nw];
            siz[par[nw]] += siz[nw];
        }
        return ans << 1;
    }
}sam;
int main() {
    scanf("%s", ss);
    n = strlen(ss);
    sam.init();
    for (register int i = n - 1; ~i; -- i) sam.insert(ss[i] - 'a');
    printf("%lld\n", (1ll * n * (n + 1) * (n - 1) >> 1) - sam.solve());
    return 0;
}

移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理 在嵌入式 AI 开发中,大家常常会遇到模型在硬件平台上运行时出现性能瓶颈的问题,比如推理速度慢、功耗过高,这严重影响了应用的实时性和稳定性 ,导致性能瓶颈,无法满足如智能安防、工业检测等场景的实时性需求。为了解决这些问题,我们可以将轻量模型移植到具有强大算力的硬件平台上。本文将手把手教你将 Google Gemini Nano(或类似轻量模型)移植到 RK3588 NPU,充分发挥 RK3588 NPU 的 6Tops 算力,实现高效的模型推理,提升嵌入式系统的 AI 处理能力。 阅读详情

相关推荐

别急着做AI:FDE教你识别真需求,让AI真正落地

人工智能项目在落地过程中,经常出现业务方高喊“我们要做AI”,却说不清具体应用场景的现象。判断一个需求是否值得用AI实现,不能只看技术流行度,而要从问题出现频率、当前替代方案以及可量化业务价值三个维度展开验证。同时需要冷静比较规则引擎与大模型的边界:不是所有语义任务都要靠生成式模型,稳定、可解释且低成本的传统方案往往更具工程性价比。数据闭环也至关重要,缺乏历史样本与反馈回流路径的项目,很难在真实环境中持续优化。针对智能客服、合同审查或企业知识库等典型场景,可借助人机协同与最小代价的用户验证,逐步筛除伪需求,

weixin_42624889的博客 342

【BZOJ3238】差异(AHOI2013)-后缀自动机+树形DP

测试地址:差异 做法:本题需要用到后缀自动机+树形DP。 我们把字符串翻转,那么原串两个后缀的最长公共前缀就变成了两个前缀的最长公共后缀。注意到在后缀自动机上,两个子串的最长公共后缀就是它们在后缀链接上的LCA,那么我们先建出后缀自动机,然后在后缀链接上DP,对于每个点,求以这个点为LCA的所有前缀对对答案的贡献。状态转移方程就不写了,详见代码,算法的总时间复杂度为O(n)O(n)O(n),可...

Maxwei_wzj的OI世界 293

一文详解心电图(ECG)监测原理

介绍心电图的监测原理,从心电信号产生、获取到心电图的基本组成

m0_50146396的博客 3289

【BZOJ 3238】 [Ahoi2013]差异

后缀数组+单调队列~

Regina8023 1244

Playwright Java环境配置避坑指南:浏览器路径、类加载与离线部署

Playwright作为现代端到端测试框架,其Java SDK突破了传统Selenium的Driver管理模式,将Chromium/Firefox/WebKit内核视为可编程运行时资源。其核心原理在于SDK与浏览器二进制分离——Maven仅管理Java字节码,而浏览器需独立下载、校验与沙箱加载。这一设计带来显著技术价值:跨平台一致性、进程隔离安全性及多浏览器并行能力;典型应用场景涵盖Spring Boot集成测试、金融级离线CI/CD、Kubernetes容器化部署及Air-Gapped封闭环境。然而,因J

weixin_32956805的博客 678

GEO优化内容营销策略:从规划到落地的全流程指南

GEO内容营销是通过地域化内容提升本地搜索排名、增加流量和转化率的策略。核心包括:构建本地用户画像,挖掘需求关键词;策划本地文化融合、案例研究等多样化内容;通过网站、社交媒体、本地KOL等渠道精准分发;优化本地关键词和视觉元素;监测数据并动态调整。案例显示,咖啡馆、工业企业和服装品牌通过本地化短视频、KOL合作及社群运营,显著提升了搜索排名、客流量和销售额。关键原则是内容本地化、精准分发、KOL合作、激励用户生成内容及数据驱动优化,实现高效本地市场渗透。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1330

BZOJ 3238 [Ahoi2013]差异 后缀数组+单调栈

BZOJ 3238 [Ahoi2013]差异 后缀数组+单调栈

-Claude 2370

Open3D——RANSAC 三维点云空间直线拟合【2025最新版】

使用RANSAC算法在点云数据中拟合三维空间直线的python代码实现。博客长期更新,本文最新更新时间为:2025年3月23日。

点云侠的博客 7354

bzoj3238后缀自动机-线性构造后缀树

这个题主要就是注意他计算的是后缀,所以我们让后缀自动机主干上的点的size=1因为不管你怎么构造后缀自动机,在从原点一直连续转移到结尾点的路径上,每个点的最长串一定都是一个后缀(当然我说的是让原来的字符串反转后构造出来的自动机!) 其他就是dp的时候有一些技巧注意,具体看代码,哦还有注意用long long  #include #include #include #include #i

guoshiyuan484的博客 454

图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础

本节全面介绍了图神经网络 (Graph Neural Network, GNN) ,包括其在数据分析和机器学习中的重要性。首先探讨了图作为数据表示的相关概念及其在各个领域的广泛应用;然后深入探讨图学习的重要性,包括不同的应用和技术。最后,重点介绍了 GNN 架构,并对比了它与其他方法之间的原理和性能差异。

盼小辉丶的博客 15万+

基于AC算法的图像显著性检测及Matlab代码实现

以上是基于AC算法的图像显著性检测的Matlab代码实现。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。

TechPulseZ的博客 438

bzoj 3238 差异

给出一个长n的字符集为小写字母的字符串,求∑1≤i<j≤nlen(Suffixi)+len(Suffixj)−2×len(lcp(Suffixi,Suffixj))\sum \limits _{1 \le i < j \le n} len(Suffix_i) + len(Suffix_j) - 2 \times len(lcp(Suffix_i,Suffix_j)) SuffixxSuffix_x

lambda QAQ 534

把雷达强度特征融合于 Cartographer的实现流程 :从地图构建到在线定位

摘要:本文提出在激光SLAM中融合强度特征的方法,解决几何匹配在退化环境中的失效问题。详细介绍了两种高反地图生成方式:离线使用assets_writer工具处理优化轨迹,在线实时累积高反点;以及权重网格的构建与预计算金字塔方法。定位阶段通过加权得分公式融合几何和强度信息,采用自适应缩放策略平衡特征依赖。该方案在不显著增加计算负担的前提下,有效提升了对称环境等退化场景的定位稳定性,对利用人工路标的移动机器人具有实用价值。

Studying…… 1328

BZOJ 3238 AHOI 2013 差异 后缀树

题目大意:求所有后缀长度减去LCP长度的二倍。 思路:之前用后缀数组写过,但是做法并不是很直观。现在学了后缀树再来写一次,这次思路就很清晰了。 首先我们把字符串按照倒序插入到后缀树中。形成的后缀树有一个很好的性质,连个后缀节点的LCA就是这两个后缀的LCP的位置,LCA的len值自然就是两个后缀的LCP。 建好树之后,进行一次树形DP,统计出来每两个后缀的LCP长度,计入总答案。

(╯°口°)╯(┴—┴ 1380

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【bzoj3238】差异 后缀树

题目大意:给你一个字符串$S$,设$S_i$是串$S$第$i$长的后缀,求: $\sum\limits_{i=1}^{|S|} \sum\limits_{j=i+1}^{|S|} |S_i|+|S_j|-2\times lcp(S_i,S_j)$ 其中$lcp(x,y)$表示字符串$x$和字符串$y$的最长公共前缀 数据范围:$|S|≤500000$ 最近发现后缀树和$sa...

diaoyoutun2652的博客 263

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

bzoj 3238: [Ahoi2013]差异 后缀树

学习了一下后缀自动机转后缀树的方法。虽然可能这道题目后缀数组也可以做。        考虑后缀自动机的parent,它对应的是比x的right集合略大一点的那个节点;对应到后缀树上,可以发现在缩边后对应的就是y的父亲。        但是后缀自动机求得实际上是所有前缀倒过来后的后缀树;因此把原串反过来跑sam,然后x连向fa[x]就是后缀树了;每个点的len实际上就是这个节点的深度。    

lych的博客 931

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【BZOJ 3238】[Ahoi2013]差异 后缀自动机构造后缀树

关于后缀自动机的学习网上有很多,所以我就只说说为什么后缀自动机可以转成后缀树。 个人觉得比较好的后缀自动机的博客:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html https://blog.youkuaiyun.com/litble/article/details/78997914 图片来源:http://blog.sina.com.cn/s/bl...

pbihao的博客 928

BZOJ 3238: [Ahoi2013]差异(后缀自动机构建后缀树)

题目 这个式子一看好眼熟。 就是求后缀树上所有后缀所在点的距离之和。 后缀树有一个(自认为)很恶心优秀的O(n)O(n)O(n) 后缀自动机求出来的后缀链接其实是前缀树。。。。。。 把字符串反过来就能建树了。 O(n∗26)O(n*26)O(n∗26)//262626是复制前向边的复杂度。 AC Code: #include<bits/stdc++.h> #define maxn 10...

Freopen的博客 388

BZOJ3238 Ahoi2013 差异 后缀自动机,后缀树,后缀数组解法三合一

BZOJ3238 Ahoi2013 差异 后缀自动机,后缀树,后缀数组解法三合一 题目传送门 题目大意 给一个长度为n的字符串,求 ∑n1≤ij≤nlen(Ti)+len(Tj)−2∗lcp(Ti,Tj)\sum_{1\leq i 其中len是长度,lcp是最大公共前缀长度,Ti,Tj是后缀 思路1:后缀数组 后缀数组求后缀公共前缀应该很简单吧,开个单调栈判断每个h[i]

maxtir的博客 470

[后缀自动机 构建后缀树 树形DP] BZOJ 3238 [Ahoi2013]差异

反串的parent树就是后缀树 lcp就是他们的lca的深度 也就是后缀自动机上的maxl 然后树形DP一下就好了#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll;inline char nc(){ static char buf[100000],*

雯舞 771

BZOJ 3238: [Ahoi2013]差异((单调栈+后缀数组)/(后缀树))

[传送门[(https://www.lydsy.com/JudgeOnline/problem.php?id=3238) 解题思路   首先原式可以把\(len\)那部分直接算出来,然后通过后缀数组求\(lcp\)。算\(\sum lcp\)的时候,刚开始傻了想要直接算贡献,结果越写越乱,后来想想只需要用单调栈把每个点的控制范围算出来即可,正着做一遍反着做一遍。注意还要考虑两个\(h[i]\)相邻...

weixin_30846599的博客 87

【BZOJ3238】差异(后缀自动机)

【BZOJ3238】差异(后缀自动机) 题面 BZOJ 题解 前面的东西直接暴力算就行了 其实没必要算的正正好 为了方便的后面的计算 我们不考虑\(i,j\)的顺序问题 也就是先求出\(\sum_{i=1}^n\sum_{j=1}^n[i\neq j]len[i]\) 然后对于每个后缀树上的节点,减去一下贡献 也就是\(size[i]*(size[i]-1)*(len[i]-len[i.paren...

weixin_30399821的博客 62

【bzoj3238】【Ahoi2013】差异

题解: 分成两部分来求,$\sum (len(T_{i})+len(T_{j}))$显然是:$\frac{(N-1)N(N+1)}{2}$ 另外一部分即所有后缀的$lcp$之和的二倍,枚举每一个$sa[i]$; 这样对于每个j从小到大的$sa[j](j<i)$来说和$sa[i]$的$lcp$是连续的且单调递增,这取决于$j+1$到$i$的$height$最小值...

weixin_30644369的博客 93

[bzoj3238]差异

对于len(Ti),len(Tj),随意乱搞就行了。 对于lcp(Ti,Tj),很显然如果将所有的后缀都搞出来的话比较好弄。 既然是要求lcp的和,那么搞到后缀树上去找节点就行了。 因为后缀树有压缩,所以没有分叉,直接树上dp就行。(即使有分叉也没啥卵用。) 但是如何统计分叉呢? 计数原理。 对于每一个分叉,很显然构成的后缀的数量是在所有结束集合中任选两个,那么就是C2sz[...

aoping9329的博客 162

【AHOI2013】BZOJ3238差异题解(SAM+树形DP)

题目:BZOJ3238. 题目大意:给定一个字符串SSS,求: ∑1≤i&lt;j≤nlen(Ti)+len(Tj)−2∗lcp(Ti,Tj) \sum_{1\leq i&lt;j\leq n}len(T_i)+len(T_j)-2*lcp(T_i,T_j) 1≤i<j≤n∑​len(Ti​)+len(Tj​)−2∗lcp(Ti​,Tj​) 其中TiT_iTi​表示SSS以第...

hzk_cpp的博客 224

[BZOJ3238][Ahoi2013]差异

后缀自动机

srand(time(0)) 826
上一篇: [SPOJ]1812 LCS2 后缀自动机
下一篇: [Codeforces]696D Legen... AC自动机 + 矩阵快速幂
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值