1269: [AHOI2006]文本编辑器editor
Submit: 5269 Solved: 2037
[Submit][Status][Discuss]
Description
这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:
文本:由0个或多个字符构成的序列。这些字符的ASCII码在闭区间[32, 126]内,也就是说,这些字符均为可见字符或空格。光标:在一段文本中用于指示位置的标记,可以位于文本的第一个字符之前,文本的最后一个字符之后或文本的某两个相邻字符之间。文本编辑器:为一个可以对一段文本和该文本中的一个光标进行如下七条操作的程序。如果这段文本为空,我们就说这个文本编辑器是空的。 编写一个程序: 建立一个空的文本编辑器。 从输入文件中读入一些操作指令并执行。 对所有执行过的GET操作,将指定的内容写入输出文件。
Input
输入文件中第一行是指令条数N,以下是需要执行的N个操作。除了回车符之外,输入文件的所有字符的ASCII码都在闭区间[32, 126]内。且行尾没有空格。
Output
依次对应输入文件中每条GET指令的输出,不得有任何多余的字符。
Sample Input
10
Insert 13
Balanced eert
Move 2
Delete 5
Next
Insert 7
editor
Move 0
Get
Move 11
Rotate 4
Get
Insert 13
Balanced eert
Move 2
Delete 5
Next
Insert 7
editor
Move 0
Get
Move 11
Rotate 4
Get
Sample Output
B
t
t
HINT
对输入数据我们有如下假定: MOVE操作不超过50 000个,INSERT、DELETE和ROTATE操作作的总个数不超过6 000,GET操作不超过20 000个,PREV和NEXT操作的总个数不超过20 000。 所有INSERT插入的字符数之和不超过2M(1M=1 024*1 024)。 DELETE操作、ROTATE操作和GET操作执行时光标后必然有足够的字符。MOVE、PREV、NEXT操作不会把光标移动到非法位置。 输入文件没有错误。
Source
rope大法好!
rope大法好!
rope大法好!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<ext/rope> 5 using namespace std; 6 using namespace __gnu_cxx; 7 8 rope<char> a,b,t; 9 int n,pos,k,len; 10 char ch[10],s[2000000],str[2000000]; 11 12 int main() 13 { 14 scanf("%d",&n); 15 for(int i=1;i<=n;i++) 16 { 17 scanf("%s",ch); 18 switch(ch[0]) 19 { 20 case 'M': 21 scanf("%d",&pos); 22 break; 23 case 'I': 24 scanf("%d",&k); 25 len=a.length(); 26 for(int i=0;i<k;i++) 27 { 28 s[i]=getchar(); 29 while(s[i]=='\n') 30 s[i]=getchar(); 31 str[k-i-1]=s[i]; 32 } 33 str[k]=s[k]=0; 34 a.insert(pos,s); 35 b.insert(len-pos,str); 36 break; 37 case 'D': 38 scanf("%d",&k); 39 len=a.length(); 40 a.erase(pos,k); 41 b.erase(len-pos-k,k); 42 break; 43 case 'R': 44 scanf("%d",&k); 45 len=a.length(); 46 t=a.substr(pos,k); 47 a=a.substr(0,pos)+b.substr(len-pos-k,k)+a.substr(pos+k,len-pos-k); 48 b=b.substr(0,len-pos-k)+t+b.substr(len-pos,pos); 49 break; 50 case 'G': 51 printf("%c\n",a[pos]); 52 break; 53 case 'P': 54 pos--; 55 break; 56 case 'N': 57 pos++; 58 break; 59 } 60 } 61 return 0; 62 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· C# 深度学习框架 TorchSharp 原生训练模型和图像识别
· 这或许是全网最全的 DeepSeek 使用指南,95% 的人都不知道的使用技巧(建议收藏)
· 拒绝繁忙!免费使用 deepseek-r1:671B 参数满血模型
· 本地搭建DeepSeek和知识库 Dify做智能体Agent(推荐)
· Sdcb Chats 重磅更新:深度集成 DeepSeek-R1,思维链让 AI 更透明!
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
2016-09-23 NOIP2010 引水入城