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

题解:P14801 [CCPC 2024 哈尔滨站] 造计算机

思路

递归构造公共后缀。(本质是有限状态自动机)

考虑直接暴力?造二叉树即可,但节点过多不可以。

但我们有一堆子树是重复的,共用即可。具体细节看代码。

实现

check_maxlen 函数

void check_maxlen(int l,int r,int ll,int rr){int mid=l+r>>1;if(l==ll&&r==rr){int len=0;int tmp=r-l+1;  // 区间长度while(tmp){len++;tmp>>=1;}if(len>ma) ma=len;  // 更新最大长度return;}if(rr<=mid)check_maxlen(l,mid,ll,rr);else if(ll>mid)check_maxlen(mid+1,r,ll,rr);else{check_maxlen(l,mid,ll,mid);check_maxlen(mid+1,r,mid+1,rr);}
}

计算区间 \([ll,rr]\) 在满二叉树结构 \([0,2^{20})\) 中对应节点需要的最大二进制长度。(脑子不太好使,其实可以一个 for 解决,但结构和构造一样就不改了)

复杂度:\(O(\log R)\)

build 函数 - 构造

void build(int x,int l,int r,int ll,int rr,int zero,pair<int,int> las){int mid=l+r>>1;if(l==ll&&r==rr){  // 当前区间完全在目标区间内int len=0;int tmp=r-l+1;while(tmp){len++;tmp>>=1;}v[las.first].push_back(make_pair(len,las.second));return;}if(zero) x=++top;  // 需要创建新节点if(zero&&las.first) v[las.first].push_back(make_pair(x,las.second));if(ll>mid)build(x,mid+1,r,ll,rr,1,make_pair(x,1));else if(rr<=mid)build(x,l,mid,ll,rr,zero,make_pair(x,0));else{build(x,l,mid,ll,mid,zero,make_pair(x,0));build(x,mid+1,r,mid+1,rr,1,make_pair(x,1));}
}

解释:

  • x: 当前处理的节点编号;
  • l,r: 当前考虑的数值范围;
  • ll,rr: 目标区间 [L,R]
  • zero: 是否需要创建新节点;
  • las: 上一个状态(节点编号,边权)。

逻辑:

  1. 完全覆盖情况:如果当前区间 \([l,r]\) 完全在 \([ll,rr]\) 内,直接连接到后缀链中对应的长度节点。
  2. 部分覆盖情况
    • 如果目标区间完全在右半:创建新节点(zero=1),边权为 \(1\)
    • 如果目标区间完全在左半:可能重用节点,边权为 \(0\)
    • 如果跨越中点:分别处理左右两部分。

复杂度: \(O(\log R)\)

主函数

signed main(){cin>>L>>R;ma=0;check_maxlen(0,(1<<20)-1,L,R);// 构建后缀共享链top=ma;for(int i=2;i<=ma;i++){v[i].push_back(make_pair(i-1,0));v[i].push_back(make_pair(i-1,1));}top++;build(top,0,(1<<20)-1,L,R,0,make_pair(0,0));cout<<top<<'\n';for(int i=1;i<=top;i++){cout<<v[i].size()<<' ';for(int j=0;j<v[i].size();j++){cout<<v[i][j].first<<' '<<v[i][j].second<<' ';}cout<<'\n';}return 0;
}

总复杂度:\(O(\log R)\)

http://www.jsqmd.com/news/346724/

相关文章:

  • 高性价比分类垃圾房厂家怎么选?四川本土品牌精选指南 - 深度智识库
  • 基于Python+Django青岛滨海学院县志捐赠与借阅信息管理系统(源码+lw+部署文档+讲解等)
  • 开源域名代理与流量限制方案 - Cloudflare + Ingress + 自签名证书
  • 基于Python的个人云盘管理系统的设计与实现(源码+lw+部署文档+讲解等)
  • 2026国内最新强韧柔顺洗发水TOP4推荐:专业洗护品牌权威榜单发布,精准适配多元发质需求 - 品牌推荐2026
  • 基于Python+Django青岛滨海学院升学信息管理系统(源码+lw+部署文档+讲解等)
  • 设计 “砍一刀” 算法:如何做到用户疯狂参与,平台绝不亏?
  • 技术、法规与市场的三重浪潮
  • 2026脑机接口测试伦理委员会新规解读:软件测试的转型契机
  • 2026年双壁热缩管厂家推荐:硅胶热缩套管/硅胶热缩管/耐油橡胶热缩套管/耐油橡胶热缩管/防滑花纹热缩套管/高阻燃热缩套管/选择指南 - 优质品牌商家
  • 千万级订单对账,怎么保证「一分钱不错」?
  • 我开发了一个 Claude Code 技能启动器,从此告别记忆命令的痛苦
  • 金融AI客服的贷款申请自动化:架构师的AI方案
  • 软件测试公众号热度内容解析:专业视角下的三大爆款赛道
  • 利用自定义html元素实现支持实时修改的高亮代码块 - Fan
  • 实现队列与任务调度的综合研究:从数据结构到分布式架构
  • Java 三色标记算法:并发垃圾回收的核心技术解析 - 教程
  • 行业巨震背后的技术逻辑
  • 2026年 包装盒厂家推荐排行榜:药品/白酒/礼品/红酒/香水/口红/手表/盲盒/人参/珠宝/耳机/奢侈品/高端/钻石/戒指/补品/智能包装盒,匠心定制与品牌赋能之选 - 品牌企业推荐师(官方)
  • 计算机技术与科学毕业设计创新的选题怎么选
  • 2026年CCD色选机厂家权威推荐榜:大米色选机、履带色选机、杂粮色选机、玉米色选机、瓜子色选机、矿石色选机、粮食色选机选择指南 - 优质品牌商家
  • 当9.9元体验课变成万元陷阱:测试工程师的认知税惨痛实录
  • 字母文字的时代困局:为何西方专家开始焦虑,汉字却成文明加速器?
  • leetcode 907. Sum of Subarray Minimums 子数组的最小值之和-内存100
  • 划重点!软考高项备考忠告:春节前搞定基础,资源管理考点快吃透!附思维导图
  • 实用指南:Linux 逻辑卷(磁盘自动扩容)
  • 2026年东莞搏击培训机构推荐榜:专业/业余/少儿/特训课程全解析,综合实力与口碑优选 - 品牌企业推荐师(官方)
  • iam-tenant 服务
  • 2026年 东莞散打培训推荐榜单:专业散打/少儿散打/周末散打/特训散打/武术格斗,实力机构精选与特色课程深度解析 - 品牌企业推荐师(官方)
  • 2026年直线电机模组公司权威推荐:高速直线电机/三轴滑台模组/丝杆滑台模组/微型滑台模组/微型直线电机/电动滑台模组/选择指南 - 优质品牌商家