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

UVA12538 Version Controlled IDE 题解 crope

Version Controlled IDE

传送门

题面翻译

维护一种数据结构,资磁三种操作。

1.在p位置插入一个字符串s

2.从p位置开始删除长度为c的字符串

3.输出第v个历史版本中从p位置开始的长度为c的字符串

1 ≤ n ≤ 50000 1 \leq n \leq 50000 1n50000,所有字符串总长度小于等于 1 0 6 10^6 106,输出字符串总长度小于等于 20000 20000 20000

强制在线,每次输入中的数字都要减去你的所有输出中字母c的个数

Translated by @litble

题目描述

PDF

输入格式

输出格式

样例 #1

样例输入 #1

6
1 0 abcdefgh
2 4 3
3 1 2 5
3 3 3 4
1 4 xy
3 5 4 6

样例输出 #1

bcdef
bcg
bxyc

注明

以上来自 U V a ,翻译来源:洛谷。 以上来自 UVa,翻译来源:洛谷。 以上来自UVa,翻译来源:洛谷。

不如在洛谷看 UVa 的题,在 vjudge 上交。

易懂版题面来自大佬 @shiyihang。

解题思路

前置知识

  • crope [ 1 ] ^{[1]} [1]

正文

需要简化一下题意:

初始有一个空字符串,下标从 1 1 1 开始,进行 N N N 次操作:

  1. 在第 p p p 个字符后插入一个字符串 s s s
  2. 删除从第 p p p 个字符(包括第 p p p 个)开始的长度为 c c c 的字符串。
  3. 输出第 v v v 个历史版本中从 p p p 个字符(包括第 p p p 个)开始的长度为 c c c 的字符串。


每次 1 , 2 1,2 1,2 操作形成一个新的版本,初始版本为 0 0 0,编号依次递增。强制在线,每一个输入中的数字减去目前所有输出中字母 c 的个数才是题目描述中的值。

对于所有的数据,满足以下条件:

  • 2 ≤ N ≤ 5 × 1 0 4 2 \le N \le 5 \times 10^4 2N5×104
  • 0 ≤ p ≤ 1 0 6 0 \le p \le 10^6 0p106
  • 0 < ∣ s ∣ , c ≤ 1 0 6 0 \lt |s|, c \le 10^6 0<s,c106


保证输入数据中的 v v v 1 1 1 到 先前输入中 操作一或二 的总数 之间。
对于 2 , 3 2,3 2,3 操作,保证子串不超过原串末尾 p + c ≤ ∣ s ∣ p + c \le |s| p+cs

很好的 crope 模版题,直接用 crope 按照题意模拟即可。

AC Code

#include<bits/stdc++.h>
#include<ext/rope>
using namespace std;
using namespace __gnu_cxx;
int n;
char s[1000005];
crope Rope, His[50005];
int Length;
signed main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0), cin >> n;int opt, v, p, c, sum = 0;crope temp;while (n--) {cin >> opt;if (opt == 1) cin >> p >> s, p -= sum, Rope.insert(p, s), His[++Length] = Rope;else if (opt == 2) cin >> p >> c, p -= sum, c -= sum, Rope.erase(p - 1, c), His[++Length] = Rope;else cin >> v >> p >> c, v -= sum, p -= sum, c -= sum, temp = His[v].substr(p - 1, c), sum += count(temp.begin(), temp.end(), 'c'), cout << temp << endl;}return 0;
}

资料来源

  • [1]:博客园 @mekdull 实用 STL —— rope 学习笔记。
http://www.lryc.cn/news/337760.html

相关文章:

  • OAuth2.0客户端和服务端Java实现
  • 物流自动分拣系统激光雷达漫反射板
  • 2024 抖音欢笑中国年(三):编辑器技巧与实践
  • Python学习入门(1)——基础语句(二)
  • vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示
  • 使用idea运行程序,发现控制台的中文出现乱码
  • 基于javassm实现的大学生兼职信息系统
  • O2OA开发平台如何查看数据表结构?
  • 心理测评性格测试矩阵版h5微信抖音QQ快手小程序app开源版开发
  • 【蓝桥杯】十六进制转八进制 C++实现
  • 明明设置数字居中对齐,为什么excel的数字却不居中?
  • 深入解析API技术:原理、实现与应用
  • C语言——数组指针变量
  • Redis的过期策略与内存淘汰机制原理及实践
  • 【24届数字IC秋招总结】提前批面试经验1——小米、百度昆仑芯、长鑫存储
  • 第7章、ReactRedux 实战 - 登录注册验证;
  • 16路HDMI+AV流媒体IPTV高清编码器JR-3216HD
  • vscode 配置文件settings.json和c_cpp_properties.json的作用
  • 【postgresql 基础入门】入门教程成形了,八大章节,涵盖库,表,事务,约束,数据类型,聚集函数,轻松入门
  • 【计算机毕业设计】人事管理系统——后附源码
  • OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问
  • 再谈C语言——理解指针(一)
  • day21-二叉树part08
  • 【WPF应用42】WPF中的 GroupBox 控件详解
  • LeetCode-72. 编辑距离【字符串 动态规划】
  • 多张静图合成gif怎么做?一键极速合成gif
  • Es中bool 查询中的四个(must must_not should filter)
  • Docker容器嵌入式开发:Docker Ubuntu18.04配置mysql数据库
  • C++类和对象中上篇
  • 基于linux进一步理解核间通讯