[ABC273E] Notebook
题目的关键点是:给定 -1
)。
如果放在 trie 树里,不就是叶子节点吗?
默认根节点为 1,根节点的父亲节点是它自己。记录每个节点的父亲节点,以及自己存的值。当前列表的最后一位(终点)则用指针 now 记录。进行如下操作:
-
ADD
:新增一个节点,将这个节点的父亲节点设为 *now,now 指向新增节点。 -
DELETE
:now 指向 *now 的父亲。 -
SAVE
: 用一个 hash_map (或者 map) 标记 x 对应的终点。也就是 map[x]=now。 -
LOAD
:将 now 指向 标记的 x 对应的终点。
每次输出 (*now).fa 即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int>m;//即 hash_map
int tot=1,now=1;
struct trie{
int fa,data;
}t[5500005];
signed main(){
int q,x;string opt;
t[1].fa=1;
cin>>q;
while(q--){
cin>>opt;
if(opt!="DELETE")cin>>x;
if(opt=="ADD"){
t[++tot].fa=now;
t[tot].data=x;
now=tot;
}
else if(opt=="DELETE")now=t[now].fa;
else if(opt=="SAVE")m[x]=now;
else if(opt=="LOAD")now=m[x];
if(t[now].fa!=now)printf("%d ",t[now].data);
else printf("-1 ");
//对于无效的 m[x],返回值为 0。正好 t[0]=0,也解决了输出 -1 的问题。
}
return 0;
}
思维方式
有时候,顺其道而行未必快速,反向思考有利于简化代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律