【NOIP2014模拟】高级打字机
2024-10-09 15:19:02
题目描述
早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。
请为这种高级打字机设计一个程序,支持如下3种操作:
T x:在文章末尾打下一个小写字母x。(type操作)
U x:撤销最后的x次修改操作。(Undo操作)(注意Query操作并不算修改操作)
Q x:询问当前文章中第x个字母并输出。(Query操作)文章一开始可以视为空串。
输入
第1行:一个整数n,表示操作数量。
以下n行,每行一个命令。保证输入的命令合法。
输出
每行输出一个字母,表示Query操作的答案。
数据
对于40%的数据 n<=200;
对于100%的数据 n<=100000;保证Undo操作不会撤销Undo操作。
<高级挑战>
对于200%的数据 n<=100000;Undo操作可以撤销Undo操作。
蒟蒻分析
其实IOI挑战那部分对限制也没啥帮助。。。看这数据点,幸好他不卡数据。
我们可以设个[1..20000]的滚动数组(This is why I said that just now)l[i]表示第i个状态时的字符串。撤回操作只用将状态设回前面就够了。
好奇宝宝倾情赞助提问时间
上面那题目都是瞎搞,你自己点开我职业看看我才中学生好伐。。。
为甚只用20000?
数据不想卡死你。
为什么你能过?
因为我长得帅。
能发源码吗?
哎呀,你想得太天真啦!我是那种让你们一点思考空间都没有直接复制的人吗?我像吗?
var
n,i,p,g,m:longint;
l:array[0..20000]of ansistring;
s,x:char;
begin
readln(n);
for i:=1 to n do
begin
read(s);
read(x);
if (s='T') then
begin
readln(x);
g:=p mod 20000+1;
l[g]:=l[p]+x;
p:=g;
end;
if (s='U') then
begin
readln(m);
p:=p mod 20000+1;
l[p]:=l[(p-m+19999)mod 20000];
end;
if (s='Q') then
begin
readln(m);
writeln(l[p,m]);
end;
end;
end.
最新文章
- 前端学php之常量
- 解决:error: .repo/manifests/: contains uncommitted changes
- [Unity3D]Unity+Android交互教程——让手机";动";起来
- nginx配置PATH_INFO模式
- JVM-类文件结构
- Careercup - Google面试题 - 5692127791022080
- 40个最好的Tumblr主题
- JavaScript学习总结-技巧、有用函数、简洁方法、编程细节
- A XSS filter for Java EE web apps--转载
- pyes-elasticsearch的python客户端使用笔记
- JS学习之路,之弹性运动框架
- Vue.js—快速入门
- Windows 7 SP1 x64 LSP
- 029_shell编写工作常用工具类总结
- LOJ #2541. 「PKUWC 2018」猎人杀(容斥 , 期望dp , NTT优化)
- Mybatis之mapper.xml配置文件中的#{}和${}
- day17作业
- 【android】 adb logcat命令查看并过滤android输出log
- Win下Eclipse提交Hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=D
- 【Go入门教程5】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)