洛谷P1738 洛谷的文件夹
原题目:点我
模拟即可,字符串处理麻烦点。如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹。
提示:高能,指针+动态内存,用数组太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 洛谷的文件夹的更多相关文章
- Java实现 洛谷 P1738 洛谷的文件夹
题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...
- 2021.08.05 P1738 洛谷的文件夹(树形结构)
2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...
- Luogu P1738 洛谷的文件夹
P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...
- Luogu1738 | 洛谷的文件夹 (Trie+STL)
题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:\(/luogu/application ...
- android多国语言文件夹文件汇总
android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...
- Android 文件夹命名规范 国际化资源
Android 文件夹命名规范 国际化资源 android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values- ...
- android多国语言文件夹
android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh ...
- Android各国语言Values文件夹命名规则
android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...
- vscode搜索所有文件夹中所有文件的方法
最近在看opencv相关的内容,看到画图这一部分时,提示我 这些代码都来自OpenCV代码的sample文件夹. 按照他的提示,我打开了相应的文件夹,却发现,so many 文件 and 文件夹,这 ...
随机推荐
- HTML5外包团队-技术分享【使用HTML5的VIDEO标记播放RTSP视频流】
使用HTML5的VIDEO播放RTSP实时视频流源代码: <!DOCTYPE html> <html><head> <meta http-equiv=&quo ...
- threadid=1: thread exiting with uncaught.exception ......解决方法
threadid=1: thread exiting with uncaught exception (group=0x40015560)E/AndroidRuntime(285): FATAL E ...
- linux知识
1. linux dns配置文件为 /etc/resolv.conf nameserver 114.114.114.114 国内常用(而国外常用8.8.8.8) 2. Linux 服务器名词与p ...
- MRD
搜索 复制
- CRM 2016 级联过滤
以下以省市为例: function preFilterLookup() { //要进行过滤的lookup按钮加入addPresearch事件 Xrm.Page.getControl("shi ...
- PHP使用feof()函数读文件的方法
这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下 本文实例讲述了PHP使用feof()函数读文件的方法 ...
- E:in-range伪类选择器与E:out-of-range伪类选择器
E:in-range伪类选择器用来指定当元素的有效值被限定在一段范围之内(通常通过min属性值与max属性值来限定),且实际输入值在该范围内时使用的样式.E:out-of-range伪类选择器用来指定 ...
- Archlinux KDE 添加中文语言包
From: https://wiki.archlinux.org/index.php/KDE_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29#.E8.AF.AD. ...
- 【caffe-windows】 caffe-master 之 matlab接口配置
平台环境: win10 64位 caffe-master vs2013 Matlab2016a 第一步: 打开\caffe-master\windows下的CommonSettings.props文 ...
- vc6 编译问题
Compiling...main.cppLinking...MSVCRT.lib(MSVCRT.dll) : error LNK2005: _malloc already defined in LIB ...