题解 洛谷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;
}
View Code

五、代码剖析

#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;
}
View Code

六、总结回顾

这道题目,我们使用了STL_set来解决问题。set的最大特点是去重和有序性。

posted @ 2020-08-08 14:49  Bushuai_Tang  阅读(166)  评论(0编辑  收藏  举报