zoukankan      html  css  js  c++  java
  • 【洛谷P1738】洛谷的文件夹【Trie】

    题目大意:

    题目链接:https://www.luogu.org/problemnew/show/P1738

    给出nn个目录地址,为了使这些文件夹都存在,需要新建几个文件夹?


    思路:

    一眼看上去就是TrieTrie。虽然暴力可过。

    这道题其实就是不用查找的TrieTrie。直接每次输出这棵树的节点数量就可以了。

    每次找到这个目录的下一个/“/”,取出这一个文件夹的名称,再在当前已找到的节点上寻找是否有这个文件夹,如果有,那么就直接进去,否则新建一个文件夹。

    我们每次读入新串的时候可以忽略这个字符串的第一个/“/”,并在这个字符串的结尾加上一个/“/”

    由于要用到字符串为下标的二维数组,所以可以用map+pairmap+pair


    代码:

    #include <cstdio>
    #include <string>
    #include <iostream>
    #include <map>
    using namespace std;
    
    string c;
    int n,num;
    map<pair<int,string>,int> trie;
    
    void insert(string s)  //插入Trie
    {
    	int p=0;
    	string k="";
    	s+='/';  //末尾加上一个/
    	for (int i=1;i<s.size();i++)  //i从1开始起到了忽略第一个/的作用
    	 if (s[i]!='/') k+=s[i];  //还没读完这个文件夹名称
    	 else
    	 {
    	 	if (!trie[make_pair(p,k)])  //没有这个文件夹
    	 	 trie[make_pair(p,k)]=++num;  //新建
    	 	p=trie[make_pair(p,k)];
    	 	k="";
    	 }
    	printf("%d\n",num);
    }
    
    int main()
    {
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    	{
    		cin>>c;
    		insert(c);
    	}
    	return 0;
    }
    
  • 相关阅读:
    winget
    splunk单节点容器部署
    jumpserver容器化部署
    思科acl
    Java springboot-plus
    接口 Postman 上传图片测试
    EF 数据迁移 新
    电商 抓取淘宝分类 包含图片和名称
    思维导图 淘宝上新流程
    功能模块 上传视频 生成视频预览图
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998565.html
Copyright © 2011-2022 走看看