当前位置: 首页 > news >正文

[POI2012] Prefixuffix 题解

容易想到这题就是求在掐掉原字符串的一个 border 之后,再求最大 border ,使得两个 border 长度之和最大。

如果暴力的话就是 \(O(n^2)\) 的但是常数比较小,可以如果没有捆绑的话可以水到很多分。

这里令 \(f_i\) 为掐掉前 \(i\) 个,后 \(i\) 个之后,最大的 border。

明显的 \(f_i\le f_{i+1}+2\)

这样可以递推地求出最大的 \(f_i\) ,将 \(f_i\)\(f_{i+1}+2\) 依次尝试,看哪一个是合法的 \(f_i\) ,记录并转到下一个 \(i-1\)

时间复杂度均摊下来是 \(O(n)\) 的,因为至多加 \(\frac{n}{2}\) 次 2。

代码比较简单:

#include <bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize("inline")
#pragma GCC target("avx", "sse2")
#pragma GCC optimize("unroll-loops")
#define ull unsigned long long
#define int long long
using namespace std;
const int N = 1E6 + 5, base2 = 2333, mod = 1e9 + 7;
int n, ans;
int pre2[N],pw2[N],f[N],dp[N];
char s[N];
inline int cal2(int l, int r) { return ((pre2[r] - pre2[l - 1] * pw2[r - l + 1] % mod) % mod + mod) % mod; }
signed main() {scanf("%lld", &n);scanf("%s", s + 1);pw2[0] = 1;for (int i = 1; i <= n; i++) pw2[i] = pw2[i - 1] * base2 % mod;for (int i = 1; i <= n; i++) pre2[i] = (pre2[i - 1] * base2 % mod + s[i]) % mod;f[0]=-1;for(int i=2,j=0;i<=n;i++){while(~j && s[i]!=s[j+1])j=f[j];f[i]=++j;//cout<<f[i]<<endl;}for(int i=n/2;i>=1;i--){dp[i]=dp[i+1]+2;while(dp[i]){if((dp[i]+i)*2>n) dp[i]--;else if(cal2(i+1,i+dp[i]) != cal2(n-i-dp[i]+1,n-i))dp[i]--;else break;}}for(int i=f[n];i;i=f[i]){//cout<<i<<endl;if(i*2<=n) ans=max(ans,dp[i]+i);}cout << ans << endl;return 0;
}
http://www.vanclimg.com/news/1475.html

相关文章:

  • 7.29
  • 2025 -- 云智计划 -- 【CSP-S】模拟赛 #2_总结+题解
  • 使Excel高亮显示选中表格(使选中的表格更加突出)
  • 2、统计连续登录5天的用户
  • AMD纯NPU运行AI画图StableDiffusion3.0模型
  • C#自学笔记:委托与事件
  • 电流探头去磁与调零操作对测量精度的影响
  • 企业HR如何将AI Agent作为战略引擎重构业务流程
  • 7月29日总结
  • thradlocal
  • ThreadLocal线程隔离值为NULL,直接复制使用封装类
  • 基于 Nacos + Higress 的 MCP 开发新范式,手把手教程来了!
  • 使用Vue.js实现动态表单字段
  • 特征 - kkksc03
  • 7月29日
  • 图神经网络的未来与挑战
  • 网站SSL证书怎么选?不用SSL证书会怎么样?
  • 安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景 - 王权富贵
  • 2025牛客暑期多校训练营5_J
  • 【LeetCode 24】力扣算法:两两交换链表中的节点
  • Pwn2Own柏林2025:第三天赛事成果与技术漏洞全记录
  • POLIR-Laws-民事诉讼法:手机录音能否作为民事诉讼证据?怎么录音才能被法院采信?
  • MCP是如何工作的?
  • OBS
  • 屏幕翻译 安卓app
  • 微算法科技(NASDAQ:MLGO)应用区块链联邦学习(BlockFL)架构,实现数据的安全传输
  • 星球助手发布更新 v1.7.0
  • 使用Spring Cloud和Resilience4j实现微服务容错与降级 - spiderMan1
  • WinForm自定义控件实现类似百度网盘客户端菜单组件
  • 【比赛记录】2025CSP-S模拟赛29