BZOJ4566 [Haoi2016]找相同字符 SAM+拓扑

自研、SaaS还是本地部署?先回答这三个关键问题 技术选型是企业和开发者常遇的难题,尤其在SaaS、本地部署与自研之间如何权衡,往往决定业务成败。三者的本质差异在于资源组织方式:SaaS强调借用,本地部署强调隔离,自研强调掌控。随着AI大模型兴起,Ollama、Dify等工具的本地部署需求激增,数据隐私与成本控制成为新的考量维度。合理的决策不能拍脑袋,而应围绕业务护城河、需求稳定性、数据与成本底线展开系统评估。实践中,混合部署正成为主流,将核心模块私有化、外围能力SaaS化,既能享受生态红利,又能保障关键数据可控。本文提供了一套可落地的选型框架,帮助团队避 阅读详情

学了 几天 SAM 这道题总算是领会到了些许 对 parent 树有了更深的理解 但是我还是不能表述出来 太菜了

大家可以去百度CLJ神犇的PPT 讲的很好 附一个百度文库的网址

我们可以先跑出两个串的 SAM 对于每一个节点 记录到达此节点的串的数目 这时候要用到拓扑 因为对于一个节点 i 如果有两个串能在i匹配 则他一定能下parent[i] 匹配 所以到拓扑将每一个节点的匹配数传给 parent 然后因为每一个节点是有 len 的 所以每个节点的个数应该为 (len[i]−len[parent[i]]∗)sz[i][0]∗sz[i][1] 求和就好啦

#include<bits/stdc++.h>
#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#define ll long long
/*
char *TT,*mo,but[(1<<15)+2];
#define getchar() ((TT==mo&&(mo=(TT=but)+fread(but,1,1<<15,stdin),TT==mo))?-1:*TT++)//*/
using namespace std;
const int N=8e5+5;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
char s[N]; 
ll ans;
int deg[N],par[N],siz[2][N],ch[N][26],len[N],n,root,sz,last;
void extend(int x){
    int p=last,np=++sz;
    len[np]=len[p]+1;
    for(;p&&!ch[p][x];p=par[p]) ch[p][x]=np;
    if(!p) par[np]=root;
    else{
        int q=ch[p][x];
        if(len[q]==len[p]+1) par[np]=q;
        else{
            int nq=++sz;
            len[nq]=len[p]+1;
            memcpy(ch[nq],ch[q],sizeof(ch[q]));
            par[nq]=par[q];par[q]=par[np]=nq;
            for(;p&&ch[p][x]==q;p=par[p])ch[p][x]=nq;
        }
    }
//  cout<<np<<" "<<par[np]<<endl; 
    last=np;
}
void topsort(){
    for(int i=1;i<=sz;i++) deg[par[i]]++;
    queue<int>q;
    for(int i=1;i<=sz;i++) if(!deg[i]) q.push(i);
    while(!q.empty()){
        int u=q.front();q.pop();
        siz[0][par[u]]+=siz[0][u];
        siz[1][par[u]]+=siz[1][u];
//      bug(siz[0][u]),bug(siz[1][u]);
        deg[par[u]]--;
        if(!deg[par[u]]) q.push(par[u]);
    }
}
int main(){
#ifdef Devil_Gary
    freopen("in.txt","r",stdin);
#endif
    scanf("%s",s+1);
    n=strlen(s+1);
    last=sz=root=1;
    int p=root;
    for(int i=1;i<=n;i++){
        extend(s[i]-'a');
        p=ch[p][s[i]-'a'];
        siz[0][p]++;
    } 
    scanf("%s",s+1);
    n=strlen(s+1);
    last=root;p=root; 
    for(int i=1;i<=n;i++){
        extend(s[i]-'a');
        p=ch[p][s[i]-'a'];
        siz[1][p]++;
    } 
    topsort();
    for(int i=1;i<=sz;i++) if(par[i]){
//      cout<<siz[1][i]<<" "<<siz[0][i]<<endl; 
        ans+=(ll)(len[i]-len[par[i]])*siz[0][i]*siz[1][i];
    }
    return printf("%lld\n",ans),0;
}
Kylin-Desktop-V10-SP1海光版虚拟机安装全流程(含桥接网络配置) 本文详细介绍了在VMware虚拟机中安装Kylin-Desktop-V10-SP1海光版操作系统的完整流程,重点解决了基于海光(Hygon C86)平台的网络配置难题。内容涵盖从镜像准备、虚拟机创建、系统安装到桥接网络配置的三种实战方法,并提供了安装后的优化与必备软件配置指南,帮助用户高效搭建国产化测试与开发环境。 阅读详情

相关推荐

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5890

【BZOJ4566】找相同字符【后缀自动机】

题意 给定两个字符串,求两个字符串相同子串的方案数。 分析 那么将字符串s1建SAM,然后对于s2的每个前缀,都在SAM中找出来,并且计数就行。 我一开始的做法是,建一个u和len,顺着s2跑SAM,当st[u].next[c]存在的时候,u=st[u].next[c],len++,这时候找到了这个前缀的最长公共后缀,然后顺着parent边向上走,然后res+=cnt[u]*(len...

weixin_30268071的博客 143

学习利用ce修改游戏生命参数

易语言代码 游戏的简陋界面 用ce查找存储这个1000即生命值的内存地址(得先附加到目标程序上,点击左上角那个电脑按钮) 看到有很多值为1000的,但哪个是生命值呢?真相只有一个 我们点击一下打我这个按钮,看下面的ce界面上地址为004A65C0处的值变了,所以这个就是我们要找的生命值 接下来我们对生命值进行修改,修改为99

zsd747289639的博客 5万+

bzoj 4566 找相同字符 —— 广义后缀自动机

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4566 建出两个串的广义后缀自动机; 统计每个点在两个串中出现次数的子树和,其实就是在两个串中的 right 集合大小; 然后统计答案乘起来即可。 代码如下: #include<cstdio> #include<cstring> #inclu...

aodan5477的博客 379

PC微信逆向:破解聊天记录文件!_读取别人pc微信msg文件

本文详细介绍了PC版微信数据库的解密方法,总结了前人经验并补充了关键细节。通过OllyDbg调试工具从微信内存中获取32字节加密密钥,使用C++结合OpenSSL库实现解密程序。重点解决了开发环境配置问题,包括Visual Studio项目设置和OpenSSL库的版本适配,将原本固定的数据库路径改为参数化输入,提高了工具的通用性。该方案为电子取证中的微信数据提取提供了完整的技术路径,避免了研究者重复探索已解决的问题。

zz96405784848的博客 9754

遥感生态指数(RSEI)——四个指数的计算

遥感生态指数是在4个生态指数的基础上通过主成分变换得出的一个评价生态环境质量的指标。因此,第二部分就是要分别计算出这4个指数的值。 ①首先,是绿度指数的计算,一般用归一化植被指数(NDVI) NDVI=(NIR-Red)/(NIR+Red) 在Bandmath工具中输入NDVI计算公式 (float(b4-b3))/(b4+b3) 其中,b3、b4分别是红波段和近红外波段 ②其次,是湿度计算。 WET = c1B1 + c2B2 + c3B3...

qq_41978498的博客 9万+

bzoj 4566[Haoi2016]找相同字符 - 后缀数组 + 单调栈

4566: [Haoi2016]找相同字符 Time Limit:20 SecMemory Limit:256 MB Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两 个子串中有一个位置不同。 Input 两行,两个字符串s1,s2,长度分别为n1,n2。1 ...

273

SAP PP工艺路线Routing保姆级配置指南:从CA01创建到替代/并行顺序实战

本文详细解析SAP PP模块中工艺路线(Routing)的配置与应用,从基础创建(CA01)到高级功能如替代顺序和并行顺序的实战操作。通过真实案例演示,帮助用户掌握SAP PP工艺路线的精细化管理,提升生产流程效率。

weixin_30898555的博客 388

bzoj 4566 后缀自动机

求两个字符串中各取出一个串使他们相同的方案数 第一个串建SAM,第二个串在上面跑匹配。  这里需要从前面遍历到后面 用size表示它的个数,求每个点的贡献,这个点已经匹配上了,那么它的父节点也是可以的,所有结果是f[fa[p]]+size[p]∗(mx[p]−mx[fa[p]])   #include &lt;cstdio&gt; #include &lt;cstring&gt; #de...

qq_39898877的博客 469

毫米波与太赫兹:十射线模型建模

Pt=1,只考虑地面和前后两面墙的反射,反射系数为0.7。用matlab设计程序并实现该功能。,总计考虑10条路径,求出接收功率随。

SupermarketX的博客 785

01-系统技术架构师必备——软件架构设计基础与核心概念

摘要 本文系统阐述了软件架构设计的核心概念与方法论,重点涵盖以下内容:1)软件架构的四大要素(构件、连接件、约束、配置)及其边界划分;2)Garlan & Shaw五大架构风格(数据流、调用/返回、独立构件、虚拟机、仓库)的典型应用场景;3)基于电商库存系统的架构选型实战案例,展示如何根据业务需求(高并发、最终一致性)选择事件驱动架构配合Saga模式;4)介绍ABSD、DSSA等主流架构方法论及ISO/IEEE标准体系。文章融合金融与互联网领域的架构实践经验,为技术架构师提供系统性的知识框架和决策参考。

模界 | AI工程化实践者 182

【BZOJ4566】找相同字符,后缀数组

.

xiaoyimi的博客 874

STM32实战开发(65):STM32摄像头图像采集开发教程

我们将会详细介绍如何使用STM32进行摄像头控制、图像数据采集以及如何将采集到的图像数据传输到其他设备进行处理。通过这篇博客,您将能够掌握STM32与摄像头模块的图像采集技术,应用于各种图像处理场景。为了确保STM32能够正确接收图像数据,我们需要配置STM32的GPIO引脚,并通过外部中断捕获这些信号。为了实现更高效的图像采集,可以通过DMA进行数据传输,将图像数据直接从GPIO引脚存储到内存中。通过DMA传输,我们可以将采集到的图像数据直接存储在内存中的一个缓冲区,然后进行后续的图像处理。

2201_76125393的博客 2537

bzoj 4566: [Haoi2016]找相同字符【SAM上DP

#include #define MAXN 400057 using namespace std; char read_s[MAXN]; struct t1{ int son[MAXN][26],pre[MAXN],dis[MAXN]; int siz[MAXN]; int lst,cnt; int lth; int p,np,q,nq; void insert(int x){

Flaze_的博客 750

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

BZOJ4566 [Haoi2016]找相同字符

看一眼题,觉得和3473好像啊,然而3473我还没做呢…… 造一个广义后缀自动机,siz开成二维把两个串的siz分开来算,每个节点对答案的贡献为(mx[x]-mx[fa[x]])*siz[0][x]*siz[1][x] #include #include #include #include #include #include #include #include #include #includ

neither_nor 1673

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

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

bzoj4566 / P3181 [HAOI2016]找相同字符

P3181 [HAOI2016]找相同字符 后缀自动机 (正解应是广义后缀自动机) 并不会广义后缀自动机。 然鹅可以用普通的后缀自动机。 我们先引入一个问题:算出从一个串内取任意两个不重合子串完全相同的方案数。 显然,对于每个点$w$,$tot+=siz[w]*(siz[w]-1)/2*(len[w]-len[fa[w]])$ $siz[w]$表示该点对应子串...

dingqiongliang0363的博客 136

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[bzoj 4566][Haoi 2016]找相同字符

传送门 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。 Solution 考虑用SAM,采用较为轻松的姿势 首先中加个特殊符号,把连个字符串接在一起 SAM的每个节点都存下了一些子串,我们分别记下它在\(s_1\)和\(s_2\)中出现的次数 那么每个状态它给答案的贡献是 \[ (...

weixin_34217711的博客 73

4566: [Haoi2016]找相同字符——后缀自动机

题目大意: 给定两个串,求有多少种方式从两个串中各提取出一个子串并且两个子串相等。 思路: 涉及两个串的子串问题考虑对第一个串建立SAM。 然后用第个二串在SAM上匹配,每到一个点,贡献是(目前的长度-这个状态的父亲的长度)x这个状态RIGHT集合的大小,同时对这个状态的每个祖先也像这样计算贡献即可。 /*======================================= * Aut...

ylsoi的博客 303

【BZOJ4566_洛谷3181】[HAOI2016]找相同字符(SAM)

自己yy的方法yyyyyyyy着就A了,写篇博客庆祝一下。 题目: 洛谷3181 分析: SAM(可能是)模板题(不会SAM的同学戳我:【知识总结】后缀自动机的构建)。 对\(s1\)建出SAM,用\(s2\)在上面跑。用\(size[i]\)表示结点\(i\)的\(Right\)集合大小(直接拓扑排序后DP就行)。既然要求\(s2\)中有多少子串在\(s1\)中出现了,那么用\(f[i]\)表示...

weixin_30251829的博客 139

BZOJ4566:[HAOI2016]找相同字符(广义SAM)

题面 题意:给你两个字符串,在两个字符串中各取出一个子串,问使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。 字符串只会SAM的我终于找到了1道一眼题。 将两个串建出广义SAM,每个状态对于两个串分别求出一个Right集, 记为r1与r2。 每个状态的贡献就为r1∗r2∗(max−min+1)r1*r2*(max-min+1)。 而对于广义SAM,我的XJB

KKiseki的博客 583

bzoj 4566: [Haoi2016]找相同字符

Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两 个子串中有一个位置不同。 Input 两行,两个字符串s1,s2,长度分别为n1,n2。1 <=n1, n2<= 200000,字符串中只有小写字母 Output 输出一个整数表示答案 Sample Inp...

weixin_30819085的博客 107

【bzoj4566】[Haoi2016]找相同字符

*题目描述: 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两 个子串中有一个位置不同。 *输入: 两行,两个字符串s1,s2,长度分别为n1,n2。1 <=n1, n2<= 200000,字符串中只有小写字母 *输出: 输出一个整数表示答案 *样例输入: aabb bbaa ...

diaopinshuo4087的博客 147

bzoj4566 [Haoi2016]找相同字符

http://www.elijahqi.win/archives/3036 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两 个子串中有一个位置不同。 Input 两行,两个字符串s1,s2,长度分别为n1,n2。1 &lt;=n1, n2&lt;= 200000,字符串中只有小写字母 Output 输出一...

Elijahqi 412

bzoj4566 [Haoi2016]找相同字符(SAM)

我们拿A串建出SAM,基数排序处理出拓扑序,算好|Right|。 用B串在SAM上跑,匹配到一个点p时计算当前匹配答案就是(len-mn[p]+1)*ri[p]。当然答案中还应该加上(mx[p]-mn[p]+1)*ri[p],对于所有的p在par树上的祖先,但是我们不能每次都直接跳父亲,这样复杂度会爆炸,因此我们只对p节点统计出现次数+1,然后处理p节点对答案的贡献。我们最后再拓扑序一遍,把剩余节

Icefox的博客 543

BZOJ 4566 [Haoi2016]找相同字符

后缀数组 或 后缀自动机后缀数组的做法 O(nlogn)O(nlogn) : 串接起来。要求的就是后缀数组中不属于同一串的后缀的LCP。暴力做O(n2) O(n^2) 。发现我们一直都在区间取min,插一个线段树,每次找出最小的然后分两边做即可。(从大到小做,用并查集维护也很好)。这个方法复杂度不是很优秀,SA常数比较大,需要一个SA的优化技巧 if(m >= n) break; 即如果已经排完了就

无尽 933
上一篇: BZOJ1823: [JSOI2010]满汉全席 2-sat
下一篇: BZOJ1025 [SCOI2009]游戏 DP
Devil_Gary
博客等级 码龄9年 5粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值