【伪·题解】高级打字机

Problem 1 高级打字机(type.cpp/c/pas)

【题目描述】

早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。

请为这种高级打字机设计一个程序,支持如下3种操作:

1.T x:在文章末尾打下一个小写字母x。(type操作)

2.U x:撤销最后的x次修改操作。(Undo操作)

(注意Query操作并不算修改操作)

3.Q x:询问当前文章中第x个字母并输出。(Query操作)

文章一开始可以视为空串。

【输入格式】

第1行:一个整数n,表示操作数量。

以下n行,每行一个命令。保证输入的命令合法。

【输出格式】

每行输出一个字母,表示Query操作的答案。

【样例输入】

7

T a

T b

T c

Q 2

U 2

T c

Q 2

【样例输出】

b

c

【数据范围】

对于40%的数据 n<=200;

对于100%的数据 n<=100000;保证Undo操作不会撤销Undo操作。

<高级挑战>

对于200%的数据 n<=100000;Undo操作可以撤销Undo操作。

<IOI挑战>

必须使用在线算法完成该题。

弱鸡只能过undo不能撤销undo的,据闻高级挑战正确解法是字典树然后搞树上倍增……

下附模拟代码

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <fstream>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <string>
 7 #include <cmath>
 8 using namespace std;
 9 ifstream fin("type.in");
10 ofstream fout("type.out");
11 char xl[1000005];
12 int zx=1;
13 void add(char z);//tybe
14 void cx(int hs);//undo
15 int main(void)
16 {
17  char cz,zm;
18  int gs=0,zls=0;
19  fin>>zls;
20  for(int i=1;i<=zls;i++)
21  {
22   if(zx<0)zx=0;
23   fin>>cz;
24   if(cz==‘T‘)fin>>zm;
25   else fin>>gs;
26   if(cz==‘T‘)add(zm);
27   if(cz==‘U‘)cx(gs);
28   if(cz==‘Q‘)fout<<xl[gs]<<"\n";
29   gs=0;
30  }
31  return 0;
32 }
33
34 void add(char z)
35 {
36  xl[zx]=z;
37  zx++;
38  return;
39 }
40
41 void cx(int hs)
42 {
43  zx-=hs;
44  return;
45 }
时间: 2024-10-15 03:50:53

【伪·题解】高级打字机的相关文章

洛谷 P1383 高级打字机==codevs 3333 高级打字机

P1383 高级打字机 18通过 118提交 题目提供者yeszy 标签倍增图论高级数据结构福建省历届夏令营 难度省选/NOI- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:

高级打字机

[题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式] 第1行:一个整数n,表示操作数量. 以下n行,每行一个命令.保证输入的命令合法. [输

洛谷 P1383 codevs 3333 高级打字机

题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. 输入输出格式 输入格式: 第1行:一个整数n,表示操作数量. 以下n行,每行一个命令.保证输入的命令合法

codevs 3333 高级打字机

时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空

[模拟赛] T1 高级打字机

Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. Input 第1行:一个整数n,表示操作数量. 以下n行,每行一个命令.保证输入的命令合法

P1383 高级打字机

P1383 高级打字机 主席树 一发主席树解决. 插入操作十分显然. 撤销操作复制前面的版本就行. 询问操作十分显然. #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 1000005 int n,lc[N],rc[N],rt[N],len[N],tot,k; char a[N],p[3],z[3]; #define mid (l+r)/2 void

树形数组——摘星星伪题解

树形数组. 题目:摘星星 描述:宇航员经常检测星图,在星图上,星星由点表示而且每颗星星都有笛卡尔坐标.星星的等级表示左下方星星的数量.宇航员想知道星星等级的分布. 例如,如上面图形所示,第5号星等级是3 (它由三个标记为1,2和4的星组成).标记着2和4的星星的等级是1,在此地图上,0等级的星星只有一个,1等级的有两个,2等级的有一个,3等级的有一个. 你设计一个程序,在给定地图上计算出每个等级星星的数量. 输入: 输入文件“INPUT.TXT”的第一行包含N个星星(1<=N<=60000),

2016程设期末伪题解

期末发挥实在是太差了-_-# 比2015年少了好多送分题,整体难度显得很大,但是考完之后静下来做又觉得并不是很难orz 1. 篮球联赛:暴力枚举(我用的dfs来枚举) 2. 夺宝探险:暴力dfs 3. 寻找边缘:从边缘暴力dfs 4. 猴子摘桃:可以直接用两个指针指向区间端点做到O(n) 5. 分形盒:直接递归 6. 42点:暴力dfs遍历所有结果 以上几题就不放代码了 7. 上机:dp 题意:有 n 个座位排成一排(1<=n<=10000),给定坐到每个座位上两边有0个.1个和2个人时可获得

【伪题解】线段树什么最讨厌了 (DFS)

Description: 小丫最近学习了线段树,但是由于她的智商比较低,运用的还不是很熟练.于是小R给了她一点练习题训练,其中有一道是这样的.这是小R写的线段树的一段建树代码: 只要调用buildtree(1,0,n)就可以得到一颗线段树了.显然,一颗线段树一共有O(n)个节点,因为每一个节点都代表了一个不同的区间,所以线段树上一共出现了O(n)个不同的区间.现在小R给了你一个区间[l ;r ] ,想要你告诉他一个最小的n使得区间[l ;]出现在了用buildtree(1,0n)建出来的线段树中