字典树 + dfs

题解:

题意: 有nn本书, 每本书的格式为CATEGORY 1/CATEGORY 2/..../CATEGORY n/BOOKNAME, 现在要重新格式化这些书的格式. 第nn个category前面需要有4(n-1)4(n−1)个空格, 如果这本书在第nn个category上, 那么它前面要有4n4n个空格. 同一category里面, category和书名都按照字典序排序, 但是category要排在书前面. 第一个category需要按照字典序排列.

题解: 用一个trie存结果, 然后一遍dfs进行输出. 需要注意的是同一个节点内要把category和书名分开存.

【代码】

#include<stdio.h>
#include<iostream>
#include<memory.h>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<algorithm>
using namespace std;
const int MAXN = 350;
const int LEN = 105;
char book[MAXN][LEN];
char* dir[MAXN];
int dirLen;
bool cmp(char *a, char *b)
{return strcmp(a, b) < 0;
}
struct Node{int left;int bro;char *str;bool book;
}node[MAXN];
int nodeLen = 0;
int head = 0;
int NewNode(char *str)
{if (!head){head = nodeLen;}node[nodeLen].left = node[nodeLen].bro = 0;node[nodeLen].str = str;node[nodeLen].book = false;return nodeLen++;
}
void Insert(int fat, int p, char *str)
{bool end = false;int i;i = 0;while (str[i] && str[i] != '/'){i++;}if (str[i] == 0){end = true;}str[i] = 0;if (!p){int q = NewNode(str);node[fat].left = q;if (!end){Insert(q, 0, str + i + 1);}else{node[q].book = true;}return;}int q;while (p && strcmp(node[p].str, str) != 0){q = p;p = node[p].bro;}if (!p){p = NewNode(str);node[q].bro = p;}if (!end){Insert(p, node[p].left, str + i + 1);}else{node[p].book = true;}
}
void Output(int level, int p)
{int q = p;if (!p){return;}while (p){if (node[p].left == 0){p = node[p].bro;continue;}for (int i = 0; i < level; i++){printf("    ");}printf("%s\n", node[p].str);Output(level + 1, node[p].left);p = node[p].bro;}p = q;while (p){if (!node[p].book){p = node[p].bro;continue;}for (int i = 0; i < level; i++){printf("    ");}printf("%s\n", node[p].str);p = node[p].bro;}
}
char str[LEN];
int main(void) {
#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);
//  freopen("out.txt", "w", stdout);
#endifint T;int ca = 0;while (gets(str)){ca++;dirLen = 0;strcpy(book[dirLen++], str);while (gets(str)&& strcmp(str, "0") != 0){strcpy(book[dirLen++], str);}for (int i = 0; i < dirLen; i++){dir[i] = book[i];}sort(dir, dir + dirLen, cmp);nodeLen = 1;head = 0;for (int i = 0; i < dirLen; i++){if (!i || strcmp(dir[i], dir[i - 1]) != 0){Insert(0, head, dir[i]);}}printf("Case %d:\n", ca);Output(0, 1);}return 0;
}

ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 A相关推荐

  1. ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A. Visiting Peking University

    ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A. Visiting Peking University 题意,一个人去北京旅游,计划待m天,但是其中有一些天交通管制,不能出去,到 ...

  2. hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)...

    #1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...

  3. ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A题 Visiting Peking University

    题目1 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n ...

  4. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 Scores

    #1236 : Scores 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 Kyle is a student of Programming Monkey Element ...

  5. ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛

    题目1 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n ...

  6. 【最短路】【Heap-dijkstra】hihocoder 1587 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 J. Typist's Problem...

    题意:给你一个串,仅含有a~g,且每个字母只出现最多一次.和一个光标初始位置,以及一个目标串,问你最少要多少的代价变化成目标串. 有五种操作:在光标前添加一个未出现过的字母,代价1. 删除光标前或者光 ...

  7. 计算机信息科学亚洲赛区冠军,祝贺竺院学子在ACM国际大学生程序设计竞赛亚洲赛区获得冠军...

    原标题:祝贺竺院学子在ACM国际大学生程序设计竞赛亚洲赛区获得冠军 Write the code. Change the World. 热烈祝贺竺可桢学院求是科学班(计算机)1601 陈靖邦.叶梓成, ...

  8. 【Java/补题/牛客/ACM赛制】2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛)

    文章目录 题目链接 知识一览 题目列表 快输 C - GCD(数论分块) 题目链接 2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛) 知识一览 01-数论分块 题目列 ...

  9. 2018ACM-ICPC国际大学生程序设计竞赛亚洲区域赛(青岛站)赛后总结

    这是今年最后一次打铁,我已经打了一年的铁了. 还是想写一个总结,不然,什么都会没留下. 实际上在去青岛之前,我已经一个月都没有严格地训练自己了,从9月份CCPC秦皇岛站打铁之后,我就基本上开始怀疑自己 ...

最新文章

  1. 使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题
  2. freemarker获取封装类中对象的属性(六)
  3. delphi 数字识别_基于STM32单片机的车牌识别
  4. 方立勋_30天掌握JavaWeb_(JSP+JavaBean实现)简单计算器
  5. python面向对象(part2)--封装
  6. 计算机网络笔记----应用层
  7. 2017.3.14 软件包管理器 思考记录
  8. 倒计时几秒_电影《时间规划局》时间就是货币,每天看着自己的生命在倒计时...
  9. 移动通信原理,GSM/GPRS模块无线传输实验教学
  10. R语言TCGA数据下载及处理biolinks包的学习与使用(一)数据下载
  11. 虚拟现实,增强现实的安全问题
  12. 方法功能增强 - 继承、装饰者模式、动态代理
  13. 微信ios接入-Objc -all_load的坑
  14. 用js实现登录的简单验证
  15. 安装matlab贝叶斯网络工具箱
  16. C语言画奥运五环以及五角星
  17. python自动发送微信文件_python自动发微信监控报警
  18. netty框架及原理解析
  19. ROS从入门到精通0-1:教程导读
  20. 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇...

热门文章

  1. 交计算机作业上师大,【图】- 师大21年新出《计算机体系结构》作业考核标准 - 昆山玉山其他教育培训 - 昆山百姓网...
  2. 一波接一波,吃瓜群众几度崩溃,微博为何总宕机?
  3. Ajax 前端性能分析利器:dynaTrace
  4. 从调试数据分析USB通信协议——USB存储介质【U盘】(二)
  5. 基于 Python Django 的在线编程学习平台(仿慕课网)
  6. 第十届世界田径锦标赛男子110米栏 刘翔获银牌
  7. echart3.0正负图取数据java代码
  8. 基于Flink的实时日志分析系统实践
  9. 【水】【违规不自杀】警惕新型校园欺凌
  10. 去中心化的社交媒体应用案例