[洛谷]P1738 洛谷的文件夾 (#STL)

題目描述

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章