题目

链接:https://ac.nowcoder.com/acm/contest/28537/G
来源:牛客网

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

小C最近学会了java小程序的开发,他很开心,于是想做一个简单的记事本程序练练手。

他希望他的记事本包含以下功能:

1、append(str),向记事本插入字符串 str(英文字符)

2、delete(k),删除记事本最后k个字符(保证不为空串)

3、print(k),输出记事本第k个字符(保证不为空串)

4、undo(),撤销最近的1(或者)操作,使记事本回到1(或者2)操作之前的状态

可怜的小C琢磨了半天还是做不来,聪明的你能解决小C的问题吗?

输入描述:

  1. 多组输入
  2. 第一行输入一个整数q,代表操作总数
  3. 以下q行每行描述了一个操作,每行以一个整数t开始(1 <= t <= 4)。
  4. t表示上述问题陈述中定义的操作类型。 如果操作需要参数,则后跟空格分隔的参数。
  5. 题目保证所有操作均合法
  6. 1 <= q <= 10^6
  7. 1 <= k <= |记事本内容长度|
  8. 每个测试数据中str的总长度 <= 10^6
  9. 请使用 ios::sync_with_stdio(false); 对读写进行加速

输出描述:

  1. 所有操作类型3必须输出第k个字符,每行以换行符结束。

示例1

输入

  1. 8
  2. 1 ab
  3. 3 2
  4. 2 2
  5. 1 cd
  6. 3 1
  7. 4
  8. 4
  9. 3 1

输出

  1. b
  2. c
  3. a

说明

  1. **样例解释**
  2. 假设记事本用字符串S表示
  3. 1、插入abS="ab"
  4. 2、输出第2个字符,是b
  5. 3、删除最后2个字符,S=""
  6. 4、插入cd, S="cd"
  7. 5、输出第1个字符,是c
  8. 6、撤销,此时S=""
  9. 7、撤销,此时S="ab"
  10. 8、输出第1个字符,是a

题解

没有什么难度

重点有坑:多组输入

代码

  1. #include <iostream>
  2. #include <string>
  3. #include <stack>
  4. using namespace std;
  5. int main()
  6. {
  7. int T;
  8. ios::sync_with_stdio(false);
  9. cin.tie(0);
  10. cout.tie(0);
  11. while(cin>> T)//注意有一个东西叫做多组输入!!!!!!!!!!
  12. {
  13. stack<string>st;
  14. int op;
  15. int op_num;
  16. string buf;
  17. while (T--)
  18. {
  19. cin >> op;
  20. switch (op)
  21. {
  22. case 1:
  23. cin >> buf;
  24. {
  25. if (st.empty())
  26. st.push(buf);
  27. else
  28. {
  29. st.push(st.top() + buf);
  30. }
  31. }
  32. break;
  33. case 2:
  34. cin >> op_num;
  35. {
  36. string tmp(st.top().begin(), st.top().end()-op_num);
  37. st.push(tmp);
  38. }
  39. break;
  40. case 3:
  41. cin >> op_num;
  42. cout << st.top()[op_num - 1] << endl;
  43. break;
  44. case 4:
  45. st.pop();
  46. break;
  47. }
  48. }
  49. }
  50. }

小C的记事本_via牛客网的更多相关文章

  1. 小A的柱状图_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/Q 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语 ...

  2. 算法题14 小Q歌单,牛客网,腾讯笔试题

    算法题14 小Q歌单,牛客网,腾讯笔试题 题目: 小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌 ...

  3. 吐泡泡_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  4. 栈和排序_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/26886/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  5. 简单的数据结构_via牛客网

    题面 链接:https://ac.nowcoder.com/acm/contest/28537/K 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  6. 牛牛与后缀表达式_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/B 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 262144K,其他语 ...

  7. 好串_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  8. 算法题16 贪吃的小Q 牛客网 腾讯笔试题

    算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...

  9. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...

随机推荐

  1. 超详细的Linux 用户与用户组知识

    一个执着于技术的公众号 1.用户和组的概念 Linux系统对用户与组的管理是通过ID号来实现的.我们在登录系统时,输入用户名与对应密码,操作系统会将用户名转化为ID号后再判断该账号是否存在,并对比密码 ...

  2. css的flex布局调试

    学习经验-css的flex布局 今天遇到一个小问题 在给三个div布局时,设置父元素display:flex 此时三个div的宽度均为50%,他们并没有超出屏幕的宽度,还是撑满了父元素. 为什么呢? ...

  3. 小数据池,is和==的区别,id()

    小数据池 概念  存放数据缓存的地方 目的   节省内存,提高效率 什么数据会被缓存(什么数据会放在小数据池中)    数字  字符串    布尔 优点: 可以帮我们快速的创建对象.节省内存. 缺点: ...

  4. git 1.2

    1.git服务器的搭建 gitlab 常用命令: gitlab-rails console -e production  进入控制台指令 sudo gitlab-ctl start # 启动所有 gi ...

  5. mysql外键,锁

    mysql外键: 场景:用于建立两个表之间的联系,让A表中一个字段,可以在另一个表中字段值的范围去查找 注意事项: (1)被参照表和参照表字段属性必须一致 (2)参照表必须设置主键 (3)必须选择支持 ...

  6. 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法

    华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,在获取用户对数据的授权后,应用可通过接口访问运动健康数据,对用户数据进行增.删.改.查等操作,为用户提供运动健康类数据服务.这 ...

  7. vmware 无法安装 win 10

    因为默认是 UEFI,但我们并没有 UEFI 引导分区,所以需要改成 BIOS

  8. mysqldump还原备份数据时遇到一个问题

    问题描述 ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = O ...

  9. cut-列过滤

    列过滤命令. 语法 cut [选项] 要过滤的字符串 选项 -f 以字段为单位进行分割 -c 以字符为单位进行分割 -b 以字节为单位进行分割 -d 以分割符为单位进行分割,分隔符可以是"冒 ...

  10. 【Java面试】如何理解Spring Boot中的Starter?

    一个工作了3年的Java程序员,遇到一个Spring Boot的问题. 他对这个问题有一些了解,但是回答得不是很好,希望参考我的高手回答. 这个问题是:"如何理解Spring Boot中的S ...