记录编号 162626 评测结果 WWWEWEEEEE
题目名称 [AHOI 2006] 可可的文本编辑器 最终得分 0
用户昵称 GravatarRP++ 是否通过 未通过
代码语言 C++ 运行时间 0.494 s
提交时间 2015-05-18 11:53:16 内存使用 4.13 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <ext/rope>

using namespace std;
using namespace __gnu_cxx;

#define maxn 2000010

rope<char>tmp, a, b;
char ch[10], s[maxn], rs[maxn];

int main() {
	freopen("editor.in", "r", stdin);
	freopen("editor.out", "w", stdout);
	int n;
	scanf("%d", &n);
	int l, len, k = 0;
	while(n--) {
		scanf("%s", ch);
		switch(ch[0]) {
			case 'M': scanf("%d", &k); break;
			case 'N': k++; break;
			case 'P': k--; break;
			case 'G': printf("%c\n", a[k]); break;
			case 'I': scanf("%d", &l); len = a.length();
					  for(int i = 0; i < l; i++) {
						s[i] = getchar();
						while(s[i] == '\n') s[i] = getchar();
						rs[l - i - 1] = s[i];
					  }
					  rs[l] = s[l] = 0;
					  a.insert(k, s), b.insert(len - k, rs);
					  break;
			case 'D': scanf("%d", &l); len = a.length();
					  a.erase(k, l), b.erase(len - k- l, l);
					  break;
			default: scanf("%d", &l); len = a.length();
					 tmp = a.substr(k, l);
					 a = a.substr(0, k) + b.substr(len - k - l, l) + a.substr(k + l, len - k - l);
					 b = b.substr(0, len - l - k) + tmp + b.substr(len - k, k);
		}
	}
}