题目描述

kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现。

洛谷的网页端,有很多文件夹,文件夹还套着文件夹。

例如:\(/luogu/application/controller\) 表示根目录下有一个名称为 \(luogu\) 的文件夹,这个文件夹下有一个名称 \(application\) 的文件夹,其中还有名为 \(controller\) 的文件夹。

每个路径的第1个字符总是 \(/\) ,且没有两个连续的 \(/\) ,最后的字符不是 \(/\) 。所有名称仅包含数字和小写字母。

目前根目录是空的。kkksc03想好了很多应该有的文件夹路径名。问题是,需要是使这些文件夹都存在,需要新建几个文件夹呢?

输入格式

输入文件第1行为一个正整数 \(N\) 。

接下来N行,每行为一个描述路径的字符串,长度均不超过 \(100\) 。

输出格式

输出应包含N行,每行一个正整数,第i行输出若要使第 \(1\) 个路径到第 \(i\) 个路径存在,最少需要新建多少个文件夹。

输入输出样例

输入 #1

2

/luogu/application/controller

/luogu/application/view

输出 #1

3

4

输入 #2

3

/chicken

/chicken/egg

/chicken

输出 #2

1

2

2

输入 #3

4

/a

/a/b

/a/c

/b/b

输出 #3

1

2

3

5

说明/提示

数据规模:

对于所有数据,\(N<=1000\) 。

对于 \(20\%\) 数据,有 \(N<=20\) ;

对于 \(50\%\) 数据,有 \(N<=200\) ;

对于 \(30\%\) 数据,有对于所有路径最多存在两个 \(/\)(包含第 \(1\) 个字符)。

————————————————————————————————

有两种比较显然的做法,第一种是直接用 \(set\) 容器存储每个文件夹的绝对路径,然后每次按顺序判断是否需要新建。

第二种是用 \(Trie\) 的结构来实现,并且这棵字典树只需要支持插入和计数操作,所以代码非常短。

理论上来讲后者的时空复杂度都是优于前者的,但是由于数据比较小,经测试实际前者更优。

这里给出第二种做法,使用了 \(map\) 容器把字符串映射为树节点的编号,方便插入和判重处理。

代码如下:

#include <bits/stdc++.h>
#define MAXN 100007
using namespace std;
int n,cnt;
map<string,int> G[MAXN];
void Find(int &now,string ob) {
//当前在编号为 now 的目录下查找名为 ob 的文件夹
if (!G[now].count(ob)) G[now][ob]=++cnt;
now=G[now][ob];
}
int main() {
scanf("%d",&n);
for (int i=1;i<=n;i++) {
string s; cin>>s,s+='/'; //方便后面的代码处理,字符串尾部加个'/'
int len=(int)s.size(),now=0,pt=1;
for (int i=1;i<=len;i++)
if (s[i]=='/') Find(now,s.substr(pt,i-pt)),pt=i+1;
printf("%d\n",cnt); //cnt 为当前已经创建的文件夹数量
}
return 0;
}

Luogu1738 | 洛谷的文件夹 (Trie+STL)的更多相关文章

  1. Java实现 洛谷 P1738 洛谷的文件夹

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...

  2. 2021.08.05 P1738 洛谷的文件夹(树形结构)

    2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...

  3. 洛谷P1738 洛谷的文件夹

    原题目:点我 题目是一个略水的题,我机制地用面向对象做了...所以代码量急剧加大,100行233 模拟即可,字符串处理麻烦点.如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹. 提示:高能,指针 ...

  4. Luogu P1738 洛谷的文件夹

    P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...

  5. 洛谷 P1706 全排列问题 :STL / dfs

    题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列, ...

  6. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  7. 洛谷.3065.第一!First!(Trie 拓扑)

    题目链接 \(Description\) 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 \(Solution\) 一个单词想要排在第一,首先是没有其它字符串是它的前缀.那 ...

  8. 洛谷P1124 文件压缩

    https://www.luogu.org/problem/show?pid=1124 题目背景 提高文件的压缩率一直是人们追求的目标.近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本 ...

  9. 洛谷 P1124 文件压缩

    P1124 文件压缩 题目背景 提高文件的压缩率一直是人们追求的目标.近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身并不压缩文件,但是经这种算法调整后的文件在大多数情况下都能获得比 ...

随机推荐

  1. 暑假第三周总结(学习HDFS操作方法)

    本周由于自己出去玩,以及家里的各种事也没好好看书,就对HDFS的一些常用的shell命令进行了学习与应用,观看了林子雨老师关于HDFS的视频,对HDFS的一些存储的原理.规则进行了一定的了解.对uba ...

  2. django3.x版本不支持MySQL5.x版本

    其实django2.0版本已经不再支持MySQL5.x的了,最开始是安装了MySQL5.1,在学习django 的时候,django版本为3.0,在执行`python manage.py migrat ...

  3. Request和Session的生命周期

    request的生命周期是request请求域,一个请求结束,则request结束 session的生命周期是session会话域,打开一个浏览器请求一个网站的页面后,Session开始,当sessi ...

  4. 9. HanLP《自然语言处理入门》笔记--9.关键词、关键句和短语提取

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 9. 信息抽取 信息抽取是一个宽泛的概念,指的是从非结构化文本中提取结构化信息的一 ...

  5. Magicodes.IE在Docker中使用

    Magicodes.IE在Docker中使用 更新日志 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_ ...

  6. remote: error: hook declined to update refs/heads

    打开工程目录下.git/config文件,补充user信息 , [user] username = xxx email = xxx@126.com 打开工程目录下.git/description文件, ...

  7. LNK2019

    原因:inline函数被外部文件的函数调用时,必须将inline函数定义在头文件中,不能定义在cpp文件中.

  8. Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration

    cat displays the contents of a file at the command line copies or apppend text file into a document ...

  9. 编译生成protobuf的jar包

    编译生成protobuf的jar包 配置maven 安装maven,并修改maven源为阿里云 下载maven wget http://mirror.bit.edu.cn/apache/maven/m ...

  10. ImportError: DLL load failed: 找不到指定的模块;ImportError: numpy.core.multiarray failed to import 报错解决

    python程序运行出错,出错的两行主要信息如下: ImportError: DLL load failed: 找不到指定的模块 ImportError: numpy.core.multiarray ...