惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
WordPress大学
WordPress大学
小众软件
小众软件
IT之家
IT之家
腾讯CDC
月光博客
月光博客
量子位
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

AirTouchの小站

DNSMgr——聚合管理所有域名DNS解析+自动续签SSL证书并部署 | AirTouchの小站 雨云香港服务器简单测评 | AirTouchの小站 七牛云 AI 狂送 token 实测到底怎么样 | AirTouchの小站 记一次博客被攻击 | AirTouchの小站 给你的 Artalk 评论区配置验证码和垃圾评论检测 | AirTouchの小站 抓紧上车!免费 E3 开发者账号又来了! | AirTouchの小站 Vercel & Cloudflare Worker 项目推荐(2) | AirTouchの小站 用 Zmail 搭建自己的临时邮箱 | AirTouchの小站 IPv6反解域名?手把手带你搞 | AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 macOS Tahoe 26中Electron架构卡顿的临时解决方案 | AirTouchの小站 用Obsidian插件增强Stellar写作体验 | AirTouchの小站 复习一下最小生成树 | AirTouchの小站 2025苹果秋季发布会亮点总结 | AirTouchの小站 分享几个artalk邮件通知模板 | AirTouchの小站 博客的图片应该存哪啊? | AirTouchの小站 Pic Smaller——自部署压缩图片的利器 | AirTouchの小站 企业微信的自定义域名邮箱太香了 | AirTouchの小站 所有道听途说,终获眼见为实 | AirTouchの小站 修复Vercel部署hexo导致文章的更新时间错误 | AirTouchの小站 jsDelivr国内公益加速镜像分享 | AirTouchの小站 搭建自己的busuanzi访问量统计服务 | AirTouchの小站 用Vercel和Netlify反代你的网站 | AirTouchの小站 用EdgeOne配置反向代理 丢掉丑陋的端口号 | AirTouchの小站 拼好鸽香港4区nat机器:月付3.5还要啥自行车! | AirTouchの小站 博客的新域名——xsl.im | AirTouchの小站
题解:P11140 [APC001] E - Linear Map | AirTouchの小站
AirTouch, me@airtouch.top · 2025-07-15 · via AirTouchの小站

www.luogu.com.cn

https://www.luogu.com.cn/problem/P11140

考虑 dp,设 fif_i 表示前 ii 个字符合法划分的方案数。

对于 ∀i\forall i,找到最小的 jj,满足 [j,i][j,i] 是有趣的,那么 fi←∑k=j−1i−1fkf_i \leftarrow \sum_{k=j-1}^{i-1} f_k,很明显这个有单调性,如果 [l,r][l,r] 有趣,那么对于 l≤i≤rl \le i \le r[i,r][i,r] 肯定有趣,所以考虑用双指针维护 [j,i][j,i]

注意不要真的取模,会很慢,判断大于直接减掉就行

代码如下,时间复杂度 O(n)O(n)

cpp
#include<bits/stdc++.h>
using namespace std;
const int N=15000100,MOD=998244353;
int f[N],cnt,l=1,cc[N],sum;
char s[N];
signed main(){
	cin.tie(0)->ios::sync_with_stdio(0);
	cin>>s+1;
	int n=strlen(s+1);
	f[0]=1;
	for(int r=1;r<=n;r++){
		while(cnt&&l<r){
			sum=s[l]-'0';
			l++;
			for(int k=l;k<=r;k++){
				sum+=s[k]-'0';
				cnt-=((cc[sum]--)==2);
			}
		}
		sum=s[r+1]-'0';
		for(int k=r;k>=l;k--){
			f[r]+=f[k-1];
			if(f[r]>=MOD) f[r]-=MOD;
			sum+=s[k]-'0';
			cnt+=((++cc[sum])==2);
		}
	}
	cout<<f[n];
	return 0; 
}