P1738 洛谷的文件夹

题目描述

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

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

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

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

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

输入格式

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

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

输出格式

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

输入输出样例

输入 #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

说明/提示

数据范围及约定

  • 对于 20%数据,有 N≤20;
  • 对于 50% 数据,有 N≤200;
  • 另有 30% 数据,有对于所有路径最多存在两个 /(包含第 1 个字符);
  • 对于所有数据,N≤1000。

解题思路(小tips)

本题非常简单 只要读懂题意:对每一种路径下的每一个文件夹都计数一次 重复则忽略不计

这里可以使用cppSTL中的set结构:因为其可以自动去重 所以在这里可以不考虑是否重复 直接插入即可 出现重复会自动忽略  另外对每行结尾 因为无‘/了 特判一次就行

甚至最后直接使用其自带的size函数 连计数器都不用额外添加了

如果仍有疑问 可以直接在评论区打字交流

AC代码展示

如果觉得有用 就点赞+收藏 鼓励一下吧

#include <iostream>
#include <set>
using namespace std;
set<string> st;
int n,k;string str,s="";
int res;

int main(){
	cin>>n;
	while(n--){
		cin>>str;
		for(int i=1;i<str.size();i++){
			if(str[i]=='/') {
				st.insert(s);
				k=0;
			}
			s[k++]=str[i];
		}
		st.insert(s); //处理每行结尾 
		k=0; //重置 
		cout<<st.size()<<endl;
		//for(auto &it:st) cout<<it<<" ";
	}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值