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 1≤n≤50000,所有字符串总长度小于等于 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

解题思路

前置知识

正文

需要简化一下题意:

初始有一个空字符串,下标从 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 2≤N≤5×104 ;
  • 0 ≤ p ≤ 1 0 6 0 \le p \le 10^6 0≤p≤106;
  • 0 < ∣ s ∣ , c ≤ 1 0 6 0 \lt |s|, c \le 10^6 0<∣s∣,c≤106。

保证输入数据中的 v v v 在 1 1 1 到 先前输入中 操作一或二 的总数 之间。

对于 2 , 3 2,3 2,3 操作,保证子串不超过原串末尾 p + c ≤ ∣ s ∣ p + c \le |s| p+c≤∣s∣。

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

AC Code

cpp 复制代码
#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;
}

资料来源

相关推荐
大明者省14 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
WWJA王文举15 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
白狐_79816 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25816 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
ShineWinsu16 小时前
对于C++:C++11中lambda、function、bind的解析
c++·面试·笔试·开发·lambda·bind·function
码匠许师傅17 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
Shell运维手记17 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
qq_4480111617 小时前
C语言中的动态内存分配
c语言·开发语言·php
杨航 AI17 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型18 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法