比赛的时候一眼就看出是字典树+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. Linux服务器配置---ftp限制ip

    ftp限制IP 1.通过vsftpd的配置文件以及“hosts.deny”和“hosts.allow”文件设置允许某个ip地址访问 1)修改配置文件“/etc/vsftpd/vsftpd.conf”中 ...

  2. Maximum execution time of 30 seconds exceeded解决错误方法

    Maximum execution time of 30 seconds exceeded解决错误方法Fatal error: Maximum execution time of 30 seconds ...

  3. PHP二维数组排序(感谢滔哥lvtao.net)

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

  4. bzoj1649 / P2854 [USACO06DEC]牛的过山车Cow Roller Coaster

    P2854 [USACO06DEC]牛的过山车Cow Roller Coaster dp 对铁轨按左端点排个序,蓝后就是普通的二维dp了. 设$d[i][j]$为当前位置$i$,成本为$j$的最小花费 ...

  5. bzoj3505 / P3166 [CQOI2014]数三角形

    P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...

  6. Java实现Sybase数据库连接

    Java实现Sybase数据库连接 需要的jar包:jconn4.jar: Java代码: /** * @Title: getConnSybase * @Description: * @param * ...

  7. 02: DOM 实例

    1.1 Event 对象 <body> <a id="myAnchor" href="http://www.microsoft.com"> ...

  8. 20145105 《Java程序设计》实验三总结

    实验三 一.       实验内容 结对修改实验一代码,重点学习重构 二.       实验步骤 下载结伴同学的实验一代码 初始代码 进行整数.小数和负数的多组数据测试,发现一个运行错误的例子 分析后 ...

  9. 20145327 《网络对抗》逆向及BOF基础实践

    20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  10. 联想预装Win10/Win8换Win7 教程 以及svn使用教程

    1.换系统教程 http://ideapad.it168.com/thread-4869510-1-1.html http://jingyan.baidu.com/article/08b6a591c8 ...