P1738 洛谷的文件夹

题目描述

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

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

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

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

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

输入格式

输入文件第 111 行为一个正整数 NNN

接下来 NNN 行,每行为一个描述路径的字符串,长度均不超过 100100100

输出格式

输出应包含 NNN 行,每行 111 个正整数,第 iii 行输出若要使第 111 个路径到第 iii 个路径存在,最少需要新建多少个文件夹。

输入输出样例 #1

输入 #1

2
/luogu/application/controller
/luogu/application/view

输出 #1

3
4

输入输出样例 #2

输入 #2

3
/chicken
/chicken/egg
/chicken

输出 #2

1
2
2

输入输出样例 #3

输入 #3

4
/a
/a/b
/a/c
/b/b

输出 #3

1
2
3
5

说明/提示

数据范围及约定

  • 对于 20%20\%20% 数据,有 N≤20N \le 20N20
  • 对于 50%50\%50% 数据,有 N≤200N \le 200N200
  • 另有 30%30\%30% 数据,有对于所有路径最多存在两个 /\verb!/!/(包含第 111 个字符);
  • 对于所有数据,N≤1000N \le 1000N1000

C++实现

#include <set>
#include <string>
#include <iostream> 

int main() {
    int n;
    std::cin >> n;
    std::set<std::string> set;
    
    for (int i = 1; i <= n; ++i) {
        std::string s;
        std::cin >> s;
        std::string dir = "";
        for (auto j : s) {
            if (j == '/')
                set.insert(dir);
            dir += j;
        }
        set.insert(dir);
        
        std::cout << set.size() - 1 << std::endl;
    }
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

Logo

2万人民币佣金等你来拿,中德社区发起者X.Lab,联合德国优秀企业对接开发项目,领取项目得佣金!!!

更多推荐