bzoj3676 [Apio2014]回文串

本文介绍一种算法,用于求解给定字符串中所有回文子串的最大出现值。利用特殊的数据结构记录字符串的回文特性,并通过巧妙的设计实现高效求解。

Description


考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出
现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最
大出现值。

一个串是回文的,当且仅当它从左到右读和从右到左读完全一样。
数据满足1≤字符串长度≤300000。

Solution


第一次接触,吓得我赶紧学习一波
具体就是每个节点记录长度,x向y连边权为w表示x通过首尾添加一个字符w能得到回文串y
与ac自动机类似的,用一个fail记录最长同后缀的回文串。一个比较神奇的操作就是建两个点长度为0、-1来表示奇偶性不同的回文串
需要注意的是统计的时候不能漏一个回文串包含另一个回文串的情况

Code


#include <stdio.h>
#include <string.h>
#include <algorithm>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define drp(i,st,ed) for (int i=st;i>=ed;--i)
typedef long long LL;
const int N=300005;
char st[N];
struct pam {
    int last,cnt,fail[N],rec[N][26],len[N],size[N];
    pam() {len[1]=-1; fail[0]=fail[1]=1; cnt=1;}
    void ins(int x,int n) {
        int p=last;
        while (st[n-len[p]-1]!=st[n]) p=fail[p];
        if (!rec[p][x]) {
            int now=++cnt,k=fail[p]; len[now]=len[p]+2;
            while (st[n-len[k]-1]!=st[n]) k=fail[k];
            fail[now]=rec[k][x]; rec[p][x]=now;
        }
        last=rec[p][x];
        size[last]++;
    }
    void solve() {
        LL ans=0;
        drp(i,cnt,1) {
            size[fail[i]]+=size[i];
            ans=std:: max(ans,(LL)size[i]*len[i]);
        }
        printf("%lld\n", ans);
    }
}pam;
int main(void) {
    // freopen("palindrome.in","r",stdin);
    // freopen("palindrome.out","w",stdout);
    scanf("%s",st+1);
    int len=strlen(st+1);
    rep(i,1,len) {
        pam.ins(st[i]-'a',i);
    }
    pam.solve();
    return 0;
}
【SCI复现】含可再生能源与储能的区域微电网最优运行:应对不确定性的解鲁棒性与非预见性研究(Matlab代码实现)内容概要:本文围绕含可再生能源与储能的区域微电网最优运行展开研究,重点探讨应对不确定性的解鲁棒性与非预见性策略,通过Matlab代码实现SCI论文复现。研究涵盖多阶段鲁棒调度模型、机会约束规划、需求响应机制及储能系统优化配置,结合风电、光伏等可再生能源出力的不确定性建模,提出兼顾系统经济性与鲁棒性的优化运行方案。文中详细展示了模型构建、算法设计(如C&CG算法、大M法)及仿真验证全过程,适用于微电网能量管理、电力系统优化调度等领域的科研与工程实践。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事微电网、能源管理相关工作的工程技术人员。; 使用场景及目标:①复现SCI级微电网鲁棒优化研究成果,掌握应对风光负荷不确定性的建模与求解方法;②深入理解两阶段鲁棒优化、分布鲁棒优化、机会约束规划等先进优化方法在能源系统中的实际应用;③为撰写高水平学术论文或开展相关课题研究提供代码参考和技术支持。; 阅读建议:建议读者结合文档提供的Matlab代码逐模块学习,重点关注不确定性建模、鲁棒优化模型构建与求解流程,并尝试在不同场景下调试与扩展代码,以深化对微电网优化运行机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值