文件可以重名。先按字典序将路径排序,再过滤掉公共前缀。
其中的问题是'\'的ASCII比[A-Z0-9]大,将它替换为空格。否则字典序有问题。

  1. /* 1504 */
  2. #include <iostream>
  3. #include <string>
  4. #include <map>
  5. #include <queue>
  6. #include <set>
  7. #include <stack>
  8. #include <vector>
  9. #include <deque>
  10. #include <algorithm>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <ctime>
  14. #include <cstring>
  15. #include <climits>
  16. #include <cctype>
  17. #include <cassert>
  18. #include <functional>
  19. #include <iterator>
  20. #include <iomanip>
  21. using namespace std;
  22. //#pragma comment(linker,"/STACK:102400000,1024000")
  23.  
  24. #define sti set<int>
  25. #define stpii set<pair<int, int> >
  26. #define mpii map<int,int>
  27. #define vi vector<int>
  28. #define pii pair<int,int>
  29. #define vpii vector<pair<int,int> >
  30. #define rep(i, a, n) for (int i=a;i<n;++i)
  31. #define per(i, a, n) for (int i=n-1;i>=a;--i)
  32. #define clr clear
  33. #define pb push_back
  34. #define mp make_pair
  35. #define fir first
  36. #define sec second
  37. #define all(x) (x).begin(),(x).end()
  38. #define SZ(x) ((int)(x).size())
  39. #define lson l, mid, rt<<1
  40. #define rson mid+1, r, rt<<1|1
  41.  
  42. typedef struct path_t {
  43. char s[];
  44. int len;
  45.  
  46. friend bool operator< (const path_t& a, const path_t& b) {
  47. return strcmp(a.s, b.s) < ;
  48. }
  49. } path_t;
  50.  
  51. const int maxn = ;
  52. char SP[];
  53. path_t path[maxn];
  54.  
  55. int main() {
  56. ios::sync_with_stdio(false);
  57. #ifndef ONLINE_JUDGE
  58. freopen("data.in", "r", stdin);
  59. freopen("data.out", "w", stdout);
  60. #endif
  61.  
  62. int t, n;
  63. int mlen, len;
  64. int i, j, k;
  65. char name[];
  66. int beg, nspace;
  67. char *s, *ss;
  68.  
  69. memset(SP, ' ', sizeof(SP));
  70.  
  71. scanf("%d", &t);
  72. while (t--) {
  73. scanf("%d", &n);
  74. for (i=; i<n; ++i) {
  75. scanf("%s", path[i].s);
  76. path[i].len = strlen(path[i].s);
  77. for (j=; j<path[i].len; ++j)
  78. if (path[i].s[j] == '\\')
  79. path[i].s[j] = ' ';
  80. path[i].s[path[i].len] = ' ';
  81. }
  82. sort(path, path+n);
  83. rep(ii, , n) {
  84. s = path[ii].s;
  85. len = path[ii].len;
  86. if (ii) {
  87. ss = path[ii-].s;
  88. mlen = min(len, path[ii-].len);
  89. nspace = ;
  90. beg = ;
  91. for (i=; i<=mlen; ++i) {
  92. if (s[i] != ss[i])
  93. break;
  94. if (ss[i] == ' ') {
  95. nspace++;
  96. beg = i + ;
  97. }
  98. }
  99. } else {
  100. beg = ;
  101. nspace = ;
  102. }
  103.  
  104. i = beg;
  105. j = ;
  106. while (i <= len) {
  107. if (s[i] == ' ') {
  108. SP[nspace] = '\0';
  109. name[j] = '\0';
  110. printf("%s%s\n", SP, name);
  111. SP[nspace++] = ' ';
  112. j = ;
  113. } else {
  114. name[j++] = s[i];
  115. }
  116. ++i;
  117. }
  118. }
  119. if (t)
  120. putchar('\n');
  121. }
  122.  
  123. #ifndef ONLINE_JUDGE
  124. printf("time = %d.\n", (int)clock());
  125. #endif
  126.  
  127. return ;
  128. }

【HDOJ】1504 Disk Tree的更多相关文章

  1. 【HDOJ】4601 Letter Tree

    挺有意思的一道题,思路肯定是将图转化为Trie树,这样可以求得字典序.然后,按照trie的层次求解.一直wa的原因在于将树转化为线性数据结构时要从原树遍历,从trie遍历就会wa.不同结点可能映射为t ...

  2. 【数据结构】B-Tree, B+Tree, B*树介绍 转

    [数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是浮云,目前Mysql的MyISAM和InnoDB都支持B-Tre ...

  3. P3690 【模板】Link Cut Tree (动态树)

    P3690 [模板]Link Cut Tree (动态树) 认父不认子的lct 注意:不 要 把 $fa[x]$和$nrt(x)$ 混 在 一 起 ! #include<cstdio> v ...

  4. LG3690 【模板】Link Cut Tree (动态树)

    题意 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y是联通的 ...

  5. AC日记——【模板】Link Cut Tree 洛谷 P3690

    [模板]Link Cut Tree 思路: LCT模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 30 ...

  6. LG3690 【模板】Link Cut Tree 和 SDOI2008 洞穴勘测

    UPD:更新了写法. [模板]Link Cut Tree 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 后接两个整数(x,y),代表询问从x到y ...

  7. (RE) luogu P3690 【模板】Link Cut Tree

    二次联通门 : luogu P3690 [模板]Link Cut Tree 莫名RE第8个点....如果有dalao帮忙查错的话万分感激 #include <cstdio> #includ ...

  8. LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板

    P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...

  9. 【LeetCode】199. Binary Tree Right Side View 解题报告(Python)

    [LeetCode]199. Binary Tree Right Side View 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/probl ...

随机推荐

  1. C# .NET 获取枚举值的自定义属性(特性/注释/备注)信息

    一.引言 枚举为我看日常开发的可读性提供的非常好的支持,但是有时我们需要得到枚举值得描述信息或者是注释(备注)信息 比如要获得 TestEmun.aaa 属性值得备注 AAA,比较不方便得到. pub ...

  2. ASP.NET 常识

    1..NET是什么?         .Net全称.NET Framework是一个开发和运行环境,         该战略是微软的一项全新创意,         它将使得"互联网行业进入一 ...

  3. 9月18日,SQL学习基础1

    数据库管理和应用 Oltp是小型的管理,OLAP是大型的管理 开发的内容如触发器 数据库管理系统(Database Management System,简称为DBMS)是位于用户与操作系统之间的一层数 ...

  4. 【Java咬文嚼字】关键字(一):super和this

    这段时间一直在学Java,看了辣么多书以及博客,心痒也是着写写自己的学习心得. 这也算是新手篇:咬文嚼字Java中的关键字. 以关键字为第一篇博文也是考虑再三:1.本人基础也是薄弱 2.集跬步至千里 ...

  5. 模板:LCS(最长公共子序列)

    #include <cstring> #define max(a,b) ((a) > (b) ? (a) : (b)) int same(char ch1,char ch2) { ; ...

  6. 配置php的CAS客户端

    1.下载安装xmapp 2.开启Apache服务. 3.下载php的CAS客户端源码包(我使用的是CAS-1.2.0.tgz),解压到xmap的htdocs目录下(D:\xmapp\htdocs),进 ...

  7. 判断浏览器是否支持某个css属性

    方法:直接判断浏览器是否支持某个CSS属性才是王道,document.documentElement.style 如:判断是否支持 transform if( 'MozTransform' in do ...

  8. Oracle 关于定义约束 / 修改表结构 /修改约束

    ---约束分5种:主键 外键 唯一 非空 检查5类约束 Oracle中分列级别约束 与 表级别约束 列级别约束:在创建表时再列上面加约束 例如: create table table11( stuno ...

  9. hive 存储格式

    hive有textFile,SequenceFile,RCFile三种文件格式. textfile为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理. Seq ...

  10. merge into 和 update 的效率对比

    以前只考虑 merge into 只是在特定场合下方便才使用的,今天才发现,merge into 竟然会比 update 在更新数据时有这么大的改进.其实呢,merge into部分的update和u ...