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. UVa489刽子手游戏题解

    2024-04-10 05:58:04       43 阅读
  2. UVA1449 Dominating Patterns 题解

    2024-04-10 05:58:04       32 阅读
  3. UVa1339古老的密码题解

    2024-04-10 05:58:04       35 阅读
  4. UVA10678 The Grazing Cow 题解a

    2024-04-10 05:58:04       34 阅读
  5. 洛谷 P1253 扶苏的问题 题解 线段树

    2024-04-10 05:58:04       10 阅读
  6. UVA-213

    2024-04-10 05:58:04       32 阅读
  7. 题解

    2024-04-10 05:58:04       27 阅读

最近更新

  1. redis中的事务和mysql中的事务有什么区别?

    2024-04-10 05:58:04       0 阅读
  2. C# 构造函数依赖注入 使用out向外传递参数

    2024-04-10 05:58:04       0 阅读
  3. 信息时代,呼唤新的哲学

    2024-04-10 05:58:04       0 阅读
  4. 【数据基础】— B树

    2024-04-10 05:58:04       0 阅读
  5. Vue 路由传参 query方法 bug 记录

    2024-04-10 05:58:04       0 阅读
  6. 翻页 上一页/下一页

    2024-04-10 05:58:04       0 阅读
  7. 前端导出pdf

    2024-04-10 05:58:04       1 阅读
  8. Knife4j的原理及应用详解(五)

    2024-04-10 05:58:04       1 阅读
  9. Day2--每日一练

    2024-04-10 05:58:04       1 阅读

热门阅读

  1. Android 14 vold 分析(2)VolumeManager 和 NetlinkManger

    2024-04-10 05:58:04       12 阅读
  2. MyBatis事务管理

    2024-04-10 05:58:04       14 阅读
  3. 手写一个民用Tomcat (03)

    2024-04-10 05:58:04       11 阅读
  4. Android 14 vold 分析(3)vold和mount service通信

    2024-04-10 05:58:04       11 阅读
  5. 小程序中展示富文本 图片不适配?视频不显示?

    2024-04-10 05:58:04       13 阅读
  6. CentOS 7关机与重启命令详解

    2024-04-10 05:58:04       17 阅读
  7. OSPF的接口网络类型

    2024-04-10 05:58:04       15 阅读