kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现。
洛谷的网页端,有很多文件夹,文件夹还套着文件夹。
例如:/luogu/application/controller表示根目录下有一个名称为luogu的文件夹,这个文件夹下有一个名称application的文件夹,其中还有名为controller的文件夹。
每个路径的第1个字符总是’/’,且没有两个连续的’/’,最后的字符不是’/’。所有名称仅包含数字和小写字母。
目前根目录是空的。kkksc03想好了很多应该有的文件夹路径名。问题是,需要是使这些文件夹都存在,需要新建几个文件夹呢?
输入文件第1行为一个正整数N。
接下来N行,每行为一个描述路径的字符串,长度均不超过100。
输出应包含N行,每行1个正整数,第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来做。
#include <stdio.h> #include <iostream> #include <set> #include <string> using namespace std; set<string> st[51]; string a,b; int n,s; signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); register int i,j; cin>>n; for(i=0;i<n;i++) { cin>>a; int cnt(0); b=""; for(j=1;j<a.size();j++)//从1开始是因为根目录的'/'不要算上 { if(a[j]!='/') b=b+a[j]; if(a[j]=='/') { st[cnt++].insert(b); b=b+a[j]; } if(j==a.size()-1)//最后一个字符,要保存目录 { st[cnt].insert(b); } } s=0; for(j=0;j<51;j++) { s+=st[j].size(); } cout<<s<<endl; } return 0; }