Problem 1 高级打字机(type.cpp/c/pas)

【题目描述】

早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。

请为这种高级打字机设计一个程序,支持如下3种操作:

1.T x:在文章末尾打下一个小写字母x。(type操作)

2.U x:撤销最后的x次修改操作。(Undo操作)

(注意Query操作并不算修改操作)

3.Q x:询问当前文章中第x个字母并输出。(Query操作)

文章一开始可以视为空串。

【输入格式】

第1行:一个整数n,表示操作数量。

以下n行,每行一个命令。保证输入的命令合法。

【输出格式】

每行输出一个字母,表示Query操作的答案。

【样例输入】

7

T a

T b

T c

Q 2

U 2

T c

Q 2

【样例输出】

b

c

【数据范围】

对于40%的数据 n<=200;

对于100%的数据 n<=100000;保证Undo操作不会撤销Undo操作。

<高级挑战>

对于200%的数据 n<=100000;Undo操作可以撤销Undo操作。

<IOI挑战>

必须使用在线算法完成该题。

这题要用字典树(Tries)

还有msm(倍增算法)

另外 补充一点

char  s[0]   或者 char

scanf("%s",s)

这句会存不下"\0"

因此会把正在循环的自变量i 变成 0

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<vector>
#include<cctype>
using namespace std;
#define MAXN (100000+10)
#define LOGMAXN (16+10)
int n,tot=0;
struct Tnode
{int deep,f[LOGMAXN];char edge;Tnode(){memset(f,0,sizeof(f));deep=-1;edge='\0';}Tnode(char _edge,int _fa,int _deep){memset(f,0,sizeof(f));f[0]=_fa;edge=_edge;deep=_deep;    }int logdeep(){return int(trunc(log(deep)/log(2)));}
}node[MAXN];
int log2(int a)
{return int(trunc(log(a)/log(2)));
}
void msm(Tnode &a)
{int n=a.logdeep();
//  if (n==1) return;for (int i=1;i<=n;i++){a.f[i]=node[a.f[i-1]].f[i-1];}
}
void type()
{char c;scanf("%s",&c);tot++;node[tot]=Tnode(c,tot-1,node[tot-1].deep+1);msm(node[tot]);
}void quere()
{int p;scanf("%d",&p);Tnode now=node[tot];p=now.deep+1-p; //第i's 祖先 while (p){int i=log2(p);p-=(1<<i);now=node[now.f[i]];}printf("%c\n",now.edge); }
void undo()
{int p;scanf("%d",&p);tot++;node[tot]=node[tot-1-p];
}
int main()
{freopen("type.in","r",stdin);freopen("type.out","w",stdout);scanf("%d",&n);node[0]=Tnode();for (int ii=1;ii<=n;ii++){
//      printf("%d\n",ii);char s[10];
//      printf("%d\n",ii);scanf("%s",s);
//      printf("%d\n",ii);
//      while(1);switch(s[0]){case 'T':type();break;case 'U':undo();break;case 'Q':quere();break;         }}
//  while (1);return 0;
}

高级打字机 (Tries)相关推荐

  1. 【搜索树】高级打字机(luogu 1383)

    高级打字机 luogu 1383 题目大意: 有三种操作:添加一个字符(更改操作),撤回前iii步步更改操作(更改操作,可以撤回自己),输出某一位的字符,现在要按要求输出字符 原题: 题目描述 早苗入 ...

  2. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

  3. 高级打字机【主席树】【滚动数组】【块状链表】

    题目大意: 一个计算机支持一下三中操作: TT xx:在文章末尾打下一个小写字母xx. UU xx:撤销最后的xx次修改操作. QQ xx:询问当前文章中第xx个字母并输出. InputInput 7 ...

  4. 【Luogu】P1383高级打字机

    可持久化线段树模板题之一. 权当温习主席树模板 #include<cstdio> #include<cstdlib> #include<cctype> #defin ...

  5. P1383 高级打字机

    一道非常基础的可持久化数据结构题. 前置芝士 可持久化线段树:实现的方法主要是主席树. 具体做法 这个基本就是一个模板题了,记录一下每一个版本的字符串的长度,在修改的时候就只要在上一个版本后面加上一个 ...

  6. 【JZOJ3794】【洛谷P1383】高级打字机【主席树】

    题目大意: 题目链接: 洛谷:https://www.luogu.org/problemnew/show/P1383 JZOJ:https://jzoj.net/senior/#main/show/3 ...

  7. P1383 高级打字机 *

    Link 主席树 思路 用 size 数组表示当前子树节点个数,新加入节点时,若 s i z e ( l c ) = = m i d − l + 1 size(lc) == mid - l + 1 s ...

  8. Conclusion

    /* 高中最后一个暑假 挺有意义的 考了一暑假的试 最后总结一下吧 一天一天来吧7.30 这一天的题有点变态啊 不过难题有难题的做法 T1斗地主 考试的时候打了0分 0分..... 原因好像是读入的格 ...

  9. 8.19noip模拟题

      2017 8.19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas ...

最新文章

  1. 有这一篇机器学习全够了
  2. adb 由于目标计算机积极拒绝,无法连接
  3. python中的类属性和类方法_python面向对象之类属性和类方法的使用和实例
  4. 数据结构 -- 可重用模块的接口设计模板
  5. 中断方式下进行串口通讯的正确方法
  6. C++基础知识点整理
  7. 低功耗广域网:关键特性
  8. h5 右下角浮动按钮_Flutter 浮动按钮-FloatingActionButton的使用
  9. java Http请求工具类【post/get】
  10. 光学efl_关于光学设计使用以及理解
  11. Android 混淆规则
  12. 佳能Canon imageCLASS MF4830d 打印机驱动
  13. win10计算机共享在哪,快速共享电脑文件,win10的“就近共享”功能了解一下!...
  14. 子空间的投影矩阵推导过程及其性质
  15. JAVA中各种单位之间的转换
  16. python中char是什么意思_MySQL中char和varchar的区别是什么
  17. 《看聊天记录都学不会C语言?太菜了吧》(6)编程很难吗?差一点就学不会了呢!
  18. zjs-my-dary-20220113
  19. matlab的积分公式,玩转matlab之一维 gauss 数值积分公式及matlab源代码
  20. 《Swift4打造今日头条视频实战项目实战》最新

热门文章

  1. matlab裁剪图片边框,MATLAB复制图片时边框大的问题
  2. python3 requests https 请求 报 SSLContext 相关递归错误
  3. SVM损失函数和softmax损失函数
  4. 【渝粤教育】国家开放大学2018年春季 8663-21T老年保健按摩 参考试题
  5. 微信小程序支付功能-服务器端实现(附源码)
  6. element 时间选择器禁用 秒 选项
  7. MongoDB学习文档
  8. ChatGPT使用拓展资料:BERT 带你见证预训练和微调的奇迹
  9. Java基础:Java抽象接口
  10. MYSQL基本操作(2)-数据表的操作