P1738

洛谷的文件夹

题目描述

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

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

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

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

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

输入格式

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

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

输出格式

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

样例 #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

提示

数据规模:

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

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

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

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

STL set实现 注意细节
点击查看代码
#include<bits/stdc++.h>
using namespace std;
set<string>st; 
int n,cnt;
int main()
{
	ios::sync_with_stdio(false);
	cin>>n;
	while(n--)
	{
		string s,s1="";
		cin>>s;
		int len=s.size();
		for(int i=0;i<len;i++)
		{
			if(s[i]=='/')
			{
				if(!st.count(s1)&&i)cnt++;
				st.insert(s1);
			}
			s1+=s[i];
		}
		if(!st.count(s1))cnt++;
		st.insert(s1);
		cout<<cnt<<"\n";
	}
	return 0;
}
posted @ 2023-01-07 13:01  PKU_IMCOMING  阅读(9)  评论(0)    收藏  举报