原题目:点我

模拟即可,字符串处理麻烦点。如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹。

提示:高能,指针+动态内存,用数组太low(在noip中用数组才是王道!)

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int foldercnt=-1;//根目录已经算了一个了,所以要把自己去除掉
bool isleaf(string s)//判断这个字符串有没有斜杠
{
for(string::iterator it=s.begin();it!=s.end();++it)
if(*it=='/')return false;
return true;
}
string getname(string s)//得到这个字符串的第一个斜杠和第二个斜杠之间的字串
{
string ans;
int cnt=0;
for(string::iterator it=s.begin();it!=s.end();++it)
{
if(*it=='/')cnt++;
if(cnt==1&&*it!='/')ans.push_back(*it);
if(cnt==2)break;
}
return ans;
}
string getmy(string s)//得到这个字符串开始到第一个斜杠之间的字串
{
string ans;
bool have=0;
for(string::iterator it=s.begin();it!=s.end();++it)
{
if(*it=='/')have=1;
if(!have)ans.push_back(*it);
}
return ans;
}
string getrest(string s)//得到第一个斜杠之后的字串
{
string ans;
bool have=0;
for(string::iterator it=s.begin();it!=s.end();++it)
{
if(have)ans.push_back(*it);
if(*it=='/')have=1;
}
return ans;
}
struct folder//文件夹结构体
{
/***constructor***/
folder(string name)//构造函数
{
this->name=name;
this->son.clear();
foldercnt++;//文件数量++
}
~folder()//析构函数
{
for(vector<folder*>::iterator it=this->son.begin();it!=this->son.end();++it)//析构自己所有的子文件夹
if(*it!=NULL)
{
delete *it;
*it=NULL;
}
}
void make(string x)//制作函数
{
if(isleaf(x))return;//如果到这里是叶子了,返回
if(getmy(x)!=this->name)return;//这句话帮了我大忙
string nm=getname(x);//得到儿子的名称
for(vector<folder*>::iterator it=this->son.begin();it!=this->son.end();++it)//找一找有没有
{
if((*it)->name==nm)//如果有
{
(*it)->make(getrest(x));//切割字符串,进入子文件夹
return;//直接返回
}
}
folder* fp=new folder(nm);//没有的情况,新建文件夹
this->son.push_back(fp);//把文件夹放到儿子表列
fp->make(getrest(x));//make文件夹
return;
}
string name;//自己的名称
vector<folder*>son;//儿子表列
};
int main()
{
folder *root=new folder("");//根节点名字为空
int n;//数量
string tmp;//输入
cin >> n;//输入
for(int i=1;i<=n;i++)//循环输入
{
cin >> tmp;
root->make(tmp);//制作文件夹
cout << foldercnt << endl; //输出总数
}
delete root;//删除根文件夹,释放内存(你想想你平时删除文件夹了文件夹里面的东西全没了嘛)
root=NULL;//野指针
return 0;
}

洛谷P1738 洛谷的文件夹的更多相关文章

  1. Java实现 洛谷 P1738 洛谷的文件夹

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...

  2. 2021.08.05 P1738 洛谷的文件夹(树形结构)

    2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...

  3. Luogu P1738 洛谷的文件夹

    P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...

  4. Luogu1738 | 洛谷的文件夹 (Trie+STL)

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:\(/luogu/application ...

  5. android多国语言文件夹文件汇总

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

  6. Android 文件夹命名规范 国际化资源

    Android 文件夹命名规范 国际化资源 android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values- ...

  7. android多国语言文件夹

    android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh ...

  8. Android各国语言Values文件夹命名规则

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

  9. vscode搜索所有文件夹中所有文件的方法

    最近在看opencv相关的内容,看到画图这一部分时,提示我  这些代码都来自OpenCV代码的sample文件夹. 按照他的提示,我打开了相应的文件夹,却发现,so many 文件 and 文件夹,这 ...

随机推荐

  1. Non-ASCII characters are not allowed outside of literals and identifiers

    出现这种问题,一般是在代码里面非注释的地方,出现了非ascii字符. 比较常见的情况是,在代码中出现了中文字符.比如在引用字符串时,用了中文的引号.或者在一行代码结尾处,使用了中文的分号. 这种问题在 ...

  2. SQLLite 学习笔记

    1.SQLLite 简介 2.命令行使用 3.常用GUI管理工具

  3. 封装实现一个自己的tabbar

    实现效果:

  4. Linux下date命令,格式化输出,时间设置

    date命令的帮助信息 [root@localhost source]# date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] ...

  5. win7以管理员身份运行bat提示系统找不到指定的路径。

    windows7“以管理员身份运行”bat提示“系统找不到指定的路径.” 使用批处理安装服务,直接双击运行没有权限,右键“以管理员身份运行”却提示“系统找不到指定的路径.”,反复查看路径是正确的. 打 ...

  6. [CF442C] Artem and Array (贪心+单调栈优化)

    题目链接:http://codeforces.com/problemset/problem/442/C 题目大意:一个数列,有n个元素.你可以做n-2次操作,每次操作去除一个数字,并且得到这个数字两边 ...

  7. ctags+cscope

    a opensource study website http://www.lanedo.com/2013/the-hidden-pearls-of-tracker-2/ http://www.lan ...

  8. Good Bye 2013 A

    A. New Year Candles time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. Apache配置简单http认证

    首先要说明的是这种认证是不安全的,密码是明文传输,因此很容易被各种嗅探软件嗅探到密码,只能用于简单的认证.今天上午把ownCloud卸载了,这玩 意儿中看不中用啊,原来10M的访问速度被限制成了几百K ...

  10. zmap使用笔记

    zmap使用笔记 zmap, 一个网络端口开放性的快速扫描工具.至于这个工具的特色,配置参数,和比的工具的对比,不做介绍.只记录一下近期使用过程中,遇到的问题.软件版本:2.1.1 传言与现实 传言: ...