NC236595. 向前文本编辑器
描述
输入描述
第一行一个整数 代表操作数。接下来 行,每行描述了一个操作。保证:,所有 的和不超过 。
输出描述
输出共一行一个字符串和整数分别代表文本最后的状态(如题意压缩后)和光标前方字符的个数。
示例1
输入:
5 1 3 1 2 2 3 1 2 2 1
输出:
a 3
说明:
示例2
输入:
2 1 100 2 60
输出:
aB 40
说明:
C++(g++ 7.5.0) 解法, 执行用时: 219ms, 内存消耗: 89144K, 提交时间: 2022-09-26 11:36:55
#import<bits/stdc++.h> using namespace std;enum{N=1<<24};int i,e,o,x,p,l[N],r[N]; char*b="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",c[N]; int main(){ for(cin>>o;cin>>o>>x;)if(o&1){ for(i=0;i<x;++i)c[++e]=b[i%62],l[e]=p,r[e]=r[p],l[r[p]]=e,r[p]=e,p=e; }else for(;x--;p=l[p]); for(o=0,i=*r,x=1;i;i=r[i],++x){ if(x==1||x%100==0) cout<<c[i]; if(p==i)o=x; }cout<<' '<<o; }
C++(clang++ 11.0.1) 解法, 执行用时: 405ms, 内存消耗: 3552K, 提交时间: 2022-09-20 21:22:47
#include <bits/stdc++.h> using namespace std; int main() { int t; scanf("%d",&t); string ans=""; int x=0; while(t--) { int op,y; string s; scanf("%d",&op); if(op==1) { cin>>s; ans.insert(x,s); x+=s.size(); } else { scanf("%d",&y); x-=y; } } cout<<ans<<" "<<x<<endl; return 0; }