比赛的时候一眼就看出是字典树+DFS了,然而这题题意比较难理解,还有不少WA点。所以很快敲完之后和队友反复斟酌题意,修改代码。结果还是交了3发WA。最后猜测目录和书在同一个母目录域下同名是不同的,增加了状态标记才AC。

赛后觉得比赛的时候写得比较乱,所以抽空重构了一遍。

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <string>
using namespace std;
struct kk//作为map的key,因为题目中,同名的书和目录是不同的,所以设置一个状态标记
{
string s;
int f;
friend bool operator < (kk a,kk b)//设定重载一定要考虑状态标记,不然map在查找的时候会不考虑状态标记的区别
{
if(a.s==b.s)
return a.f<b.f;
return a.s<b.s;
}
};
struct node//字典树结构体,比赛的时候直接扔模板了,今天手写了一遍
{
map<kk,node*> m;
string s;
void ini()
{
m.clear();
}
}head;
void Ins(vector<string> &s)//字典树的插入
{
int f;
node* p=&head;
for(int i=;i<s.size();i++)
{
if(i==s.size()-) f=;//除了最后一本都是目录
else f=;
kk now={s[i],f};
//cout<<"test"<<endl;
if(p->m.find(now)!=p->m.end())
p=p->m[now];
else
{
node *makenode;
makenode = new node;
makenode->ini();
makenode->s=now.s;
p->m[now]=makenode;
p=makenode;
}
}
}
void print(node *p,int cnt)
{
for(int i=;i<cnt;i++)
cout<<" ";
cout<<p->s<<endl;
}
void dfs(node *p,int cnt)//用DFS输出结果
{
if(p==NULL)
return ;
queue<node*> rec;
map<kk,node*> ::iterator it;
for(it=p->m.begin();it!=p->m.end();it++)
{
if(it->second->m.size())
print(it->second,cnt);
else
rec.push(it->second);//如果是书本,先推入队列,最后再输出
dfs(it->second,cnt+);
}
while(!rec.empty())
print(rec.front(),cnt),rec.pop();
}
void Gs(string str,vector<string> &s)//字符串处理,分离出关键字并存入vector
{
string te="";
for(int i=;i<str.length();i++)
{
if(str[i]!='/')
te+=str[i];
else
s.push_back(te),te="";
}
s.push_back(te);
}
int main()
{
cin.sync_with_stdio(false);
string str;
int cas=;
head.ini();
vector<string> s;
while(getline(cin,str))
{
if(str=="")
{
cout<<"Case "<<cas++<<":"<<endl;
dfs(&head,);
s.clear();
head.ini();
}
else
{
Gs(str,s);
Ins(s);
s.clear();
}
}
return ;
}

ACM-ICPC Beijing Online A The Book List的更多相关文章

  1. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  2. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  3. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  4. ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))

    祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...

  5. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

  6. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  7. hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...

  8. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  9. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  10. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. Python的问题解决: IOError: [Errno 32] Broken pipe

    被该问题困扰的人还是挺多的,所以又对这个问题进行了一些更深入的分析,希望可以解决读者的问题新版本:Python 的 Broken Pipe 错误问题分析 遇到一个很奇怪的问题, web.py代码里面报 ...

  2. Code Blocks+gtest环境配置

    本文仅介绍Code::Blocks+gtest环境配置,gtest具体使用方法请参考: 玩转Google开源C++单元测试框架Google Test系列(gtest)(总) http://www.cn ...

  3. MongoDB— 细说操作

    基本操作 由于是开篇,就大概的说下基本的“增删查改“,我们再开一个cmd,输入mongo命令打开shell,其实这个shell就是mongodb的客户端, 同时也是一个js的编译器,默认连接的是“te ...

  4. keepalived+lvs高可用集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  5. 20145216史婧瑶《网络对抗》逆向及Bof进阶实践

    20145216史婧瑶<网络对抗>逆向及Bof进阶实践 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢 ...

  6. pip install MySQL-python

    在win7下安装了python后,想安装python-mysql,使用pip安装出现如下问题: pip install MySQL-pythonbuild\lib.win-amd64-2.7\_mys ...

  7. 有时候shell中某些变量总是不能被改变是什么原因

    答:在子shell执行,那么变量的值总是不能如愿以偿的改变,示例如下: #!/bin/sh var="jello" cat "jello.txt" | whil ...

  8. js 注意点

    1.var // 反例 myname = "global"; // 全局变量 function func() { alert(myname); // "undefined ...

  9. RHEL7--linux系统启动流程与故障排除

    一.Linux启动过程 MBR保存着系统的主引导程序(grub 446字节,分区表64字节),启动过程就是把内核加载到内存. 启动的顺序: 1.BIOS: 2.BIOS激活MBR: 3.MBR中的引导 ...

  10. JDBC中 execute 与 executeUpdate的区别

    相同点 execute与executeUpdate的相同点:都可以执行增加,删除,修改 不同点 execute可以执行查询语句 然后通过getResultSet,把结果集取出来 executeUpda ...