原题目:点我

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

提示:高能,指针+动态内存,用数组太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. 1、java中常用名字规范

    包名:多个单词组成是所有单词字母小写. 类名.接口名:所有单词首字母大写. 变量名.函数名:多单词组成时第一个单词首字母小写,从第二个单词开始首字母大写. 常量名:所有字母大写,单词之间用 “_” 连 ...

  2. TIOBE Index for December 2015(转载)

    There is hardly any doubt about it, Java will become TIOBE's programming language of the year 2015. ...

  3. Visual.Studio.2013.IDE+visual.studio.15.preview5 编译器

    硬盘版Visual.Studio.2013.IDE + visual.studio.15.preview5 编译器 使用前注意以下事项: 1.右键-管理员权限安装,VS15补丁.exe,补丁是VS15 ...

  4. struts2&&Hibernate Demo1

    这篇文章和<struts1&&Hibernate Demo1>基本类似,我这里只是拷贝代码了. 最核心的代码:LoginAction.java package action ...

  5. RMAN_学习笔记3_RMAN Catalog恢复目录

    2014-12-23 Created By BaoXinjian

  6. express - ejs使用介绍

    http://blog.sina.com.cn/s/blog_ad0672d60101l2ml.html 1.express中使用ejs var express = require('express' ...

  7. Tomcat - SSL操作大全

    简介 制作CSR申请文件 安装证书文件 客户证书认证 证书的备份(导出) 证书的恢复(导入)   简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.0.20(截止 ...

  8. python中利用logging包进行日志记录时的logging.level设置选择

    之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...

  9. Aspose.Cells 设置背景颜色

    很多小伙伴设置背景颜色都不起作用,特别提醒需要加入下面一行: style.Pattern = BackgroundType.Solid; Aspose.Cells.Style style = null ...

  10. 使用nginx部署Yii 2.0\yii-basic-app-2.0.5

    nginx.conf #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log noti ...