题解 洛谷P1738 【洛谷的文件夹】
一、目录概览
一、目录概览
二、题目大意
三、大致思路
四、代码实现
五、代码剖析
六、总结回顾
二、题目大意
kkksc03想好了很多应该有的文件夹路径名。
问题是,需要是使这些文件夹都存在,需要新建几个文件夹呢?
文件夹路径是什么?例如/A/B/C,表示在根目录下有A文件夹,在A文件夹里有B文件夹,在B文件夹里有C文件夹。其他路径同理。
三、大致思路
这道题目我们需要用set来解决。
这里可供学习。
我们在这道题用set的无重性质。
将每个文件夹的路径都添加进set。
假设给了你一个/A/B/C。
那么你需要:
加入A的路径,set.insert("/A");
加入B的路径,set.insert("/A/B");
加入C的路径,set.insert("/A/B/C");
四、代码实现
解释见第五区
#include<bits/stdc++.h> using namespace std; int Total; string Now; int main(void) { register int i; cin>>Total; register set<string>Set; Set.clear(); while(Total--) { register string Push; cin>>Now; Push=""; for(i=0;i<Now.size();i++) { if(Now[i]=='/') { Set.insert(Push); } Push+=Now[i]; } Set.insert(Push); cout<<Set.size()-1<<endl; } return 0; }
五、代码剖析
#include<bits/stdc++.h> using namespace std; int Total; string Now; int main(void) { register int i; cin>>Total; register set<string>Set;//定义set Set.clear();//清空set while(Total--) { register string Push; cin>>Now; Push="";//每次加进set的字符串 for(i=0;i<Now.size();i++)//扫描字符串 { if(Now[i]=='/')//如果扫完一个文件夹 { Set.insert(Push);//那么就加入路径 } Push+=Now[i];//更新路径 } Set.insert(Push);//加入最后文件夹的路径 cout<<Set.size()-1<<endl;//减去“/”这个字符串 } return 0; }
六、总结回顾
这道题目,我们使用了STL_set来解决问题。set的最大特点是去重和有序性。
不要妄图追上西坠的太阳,而是要在黎明前就等着它!