codevs 3333 高级打字机

时间:2021-08-27 16:07:51

3333 高级打字机

 
题目描述 Description

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

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

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

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

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

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

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

输入描述 Input Description

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

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

输出描述 Output Description

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

样例输入 Sample Input

7

T a

T b

T c

Q 2

U 2

T c

Q 2

样例输出 Sample Output

b

c

数据范围及提示 Data Size & Hint

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

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

<高级挑战>

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

栈模拟得50分,不知道为什么输入两个字符串对不了

#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 100010
int top,n;
char a[maxn],op[],is[];
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s%s",op,is);
if(op[]=='T')a[++top]=is[];
if(op[]=='U')top-=is[]-'';
if(op[]=='Q')cout<<a[is[]-'']<<endl;
}
return ;
}

0分

#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 100010
int top,n;
char a[maxn],op[],is[];
int main(){
scanf("%d",&n);
for(int i=, x;i<=n;i++){
scanf ("%s", op);
if(op[]=='T'){
scanf ("%s",is);
a[++top]=is[];
}
if(op[]=='U'){
scanf ("%d",&x);
top-=x;
}
if(op[]=='Q'){
scanf ("%d",&x);
cout<<a[x]<<endl;
}
}
return ;
}

50分