news 2026/7/5 15:06:23

UVa 520 Append

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 520 Append

题目描述

题目要求计算给定的编码序列CwC_wCw可以分解为CuCvC_u C_vCuCv的方式数,其中uuuvvv均为非空字符串,且w=uvw = uvw=uv。编码规则如下:

  • 每个编码对(pi,ri)(p_i, r_i)(pi,ri)要么是0 c(表示添加字符ccc),要么是p r(表示从当前位置往前ppp个位置开始,复制rrr个字符添加到末尾)。
  • 解码过程按顺序处理每个编码对,最终得到字符串www

需要统计将编码序列CwC_wCw拆分成两个非空前缀和后缀编码对序列的方式数,使得解码后的字符串恰好对应www的前缀和后缀。

输入格式

输入包含多个数据块。每个数据块由若干行组成,每行一个编码对:

  • pi=0p_i = 0pi=0,格式为0 c,其中ccc为小写字母。
  • pi>0p_i > 0pi>0,格式为p r,其中1≤r≤p<10001 \le r \le p < 10001rp<1000
    每个数据块后有一个空行。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每个数据块,输出一行一个整数,表示分解方式的数目。

样例

输入

0 a 1 1 0 b 3 3 3 3 3 2 0 c

输出

1

题目分析

本题的核心是模拟解码过程,并确定所有可能的拆分点。

解码模拟

维护一个列表(或双端队列)记录每次添加操作后新字符的起始位置。每次解码时:

  • 若遇到0 c,则新字符的位置为当前字符串长度。
  • 若遇到p r,则新添加的字符是从当前位置往前ppp个位置开始的连续rrr个字符。这些字符对应的原始位置可以通过回溯得到。

拆分点计数

解码完成后,我们得到了整个字符串www的构建历史。每个字符都有一个“来源”位置(即它是由哪个编码对添加的)。CuC_uCu对应www的前缀部分,CvC_vCv对应后缀部分。CuC_uCu必须是某个前缀,且对应的编码对序列是CwC_wCw的某个前缀。关键是要找出所有位置kkk,使得前kkk个编码对解码出的字符串恰好是www的前缀,且后∣Cw∣−k|C_w| - kCwk个编码对解码出的字符串是www的后缀。

实际上,参考代码使用了一个队列cache来记录每次添加操作后新字符的索引。当遇到0 c时,将当前长度加入队列;当遇到p r时,通过回溯找到复制源的起始位置。最终队列中的元素个数减111即为分解方式数(因为最后一个元素对应整个字符串,而前面的每个元素都对应一个有效的拆分点)。

复杂度分析

每个编码对处理O(1)O(1)O(1)O(p)O(p)O(p),总复杂度可接受。

代码实现

// Append// UVa ID: 520// Verdict: Accepted// Submission Date: 2017-05-03// UVa Run Time: 0.000s//// 版权所有(C)2017,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);intpi,ri;string line;while(getline(cin,line)){intcurrent=0;list<int>cache;do{pi=ri=0;intidx=0;while(!isblank(line[idx])){pi=pi*10+(line[idx]-'0');idx++;}if(pi==0)ri=1;else{idx++;while(idx<line.length()){ri=ri*10+(line[idx]-'0');idx++;}}if(pi==0)cache.push_back(current++);else{while(current-cache.back()<pi)cache.pop_back();current+=ri;}}while(getline(cin,line),line.length()>0);cout<<(cache.size()-1)<<'\n';}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 15:05:09

面试口述版:个人对 Prometheus 完整理解

结合 K8s 集群搭建 SRE 智能运维 Agent 的实操项目&#xff0c;我从定位、核心架构、项目落地、踩坑感悟四个层面讲下我对 Prometheus 的理解。一、核心定位Prometheus 是一套开源、面向云原生场景的时序监控告警系统&#xff0c;采用 Pull 拉取架构采集指标&#xff0c;配套独…

作者头像 李华
网站建设 2026/7/5 15:03:14

Python之osmapi-wrapper包语法、参数和实际应用案例

Python osmapi-wrapper 完整使用手册 一、osmapi-wrapper 基础概述 1. 包核心定位 osmapi-wrapper 是OpenStreetMap(OSM)官方API v0.6 的轻量化Python封装库&#xff0c;替代老旧原生osmapi&#xff0c;简化OSM地图数据读写、要素编辑、变更集上传、用户信息查询、轨迹下载全…

作者头像 李华
网站建设 2026/7/5 15:01:05

Python+WinAppDriver桌面应用自动化测试:从环境配置到实战案例

1. 项目概述&#xff1a;为什么是Python WinAppDriver&#xff1f;如果你是一名测试工程师&#xff0c;或者是一名需要频繁与Windows桌面软件打交道的开发者&#xff0c;那么“自动化测试”这个词对你来说一定不陌生。过去很长一段时间里&#xff0c;提到UI自动化&#xff0c;…

作者头像 李华
网站建设 2026/7/5 14:57:56

如何快速配置洛雪音乐:面向新手的完整音源指南

如何快速配置洛雪音乐&#xff1a;面向新手的完整音源指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为音乐会员费用发愁吗&#xff1f;还在不同音乐平台间频繁切换寻找资源&#xff1f;…

作者头像 李华
网站建设 2026/7/5 14:57:33

4-20mA电流环检测与PIC单片机信号处理方案

1. 4-20mA电流环基础与行业应用工业现场最可靠的信号传输方式莫过于4-20mA电流环&#xff0c;这个看似简单的标准已经统治过程控制领域半个多世纪。电流信号相比电压信号具有显著优势&#xff1a;抗干扰能力强&#xff0c;可长距离传输&#xff08;理论可达数公里&#xff09;&…

作者头像 李华