NC15975. 小C的记事本
描述
输入描述
多组输入
第一行输入一个整数q,代表操作总数
以下q行每行描述了一个操作,每行以一个整数t开始(1 <= t <= 4)。
t表示上述问题陈述中定义的操作类型。 如果操作需要参数,则后跟空格分隔的参数。
题目保证所有操作均合法
1 <= q <= 10^6
1 <= k <= |记事本内容长度|
每个测试数据中str的总长度 <= 10^6
请使用 ios::sync_with_stdio(false); 对读写进行加速
输出描述
所有操作类型3必须输出第k个字符,每行以换行符结束。
示例1
输入:
8 1 ab 3 2 2 2 1 cd 3 1 4 4 3 1
输出:
b c a
说明:
**样例解释**C++14(g++5.4) 解法, 执行用时: 1037ms, 内存消耗: 17384K, 提交时间: 2020-10-09 22:07:25
#include <bits/stdc++.h> using namespace std; int main(){ int t; while(cin>>t){ string s1; stack<string>s; s.push(""); int a; while(t--){ cin>>a; if(a==1){ cin>>s1; s.push(s.top()+s1); } else if(a==2){ int k; cin>>k; s1=s.top(); s.push(s1.substr(0,s1.length()-k)); } else if(a==3){ int k; cin>>k; s1=s.top(); cout<<s1[k-1]<<endl; } else s.pop(); } } }
C++(clang++11) 解法, 执行用时: 1066ms, 内存消耗: 17380K, 提交时间: 2021-01-19 17:47:16
#include<bits/stdc++.h> using namespace std; int t,n; int main(){ while(cin>>n&&n){ stack<string> s; string str,x; int op,k; s.push(""); while(n--){ cin>>op; if(op==1){ cin>>x; s.push(s.top()+x); } else if(op==2){ cin>>k; x=s.top(); s.push(x.substr(0,x.length()-k)); } else if(op==3){ cin>>k; x=s.top(); cout<<x[k-1]<<endl; } else s.pop(); } } }
pypy3 解法, 执行用时: 770ms, 内存消耗: 48704K, 提交时间: 2023-08-04 23:18:07
import sys for iii in sys.stdin: iii=int(iii) x="" st=[] for ii in range(iii): s=next(sys.stdin).split() t=s[0] if t=="1": st.append(x) x=x+s[1] elif t=="2": st.append(x) x=x[0:len(x)-int(s[1])] elif t=="3": print(x[int(s[1])-1]) else: x=st.pop()