比赛的时候一眼就看出是字典树+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. Java设计模式应用——适配器模式

    性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功 ...

  2. javascript中的console.log有什么作用?

    javascript中的console.log有什么作用? 主要是方便你调式javascript用的.你可以看到你在页面中输出的内容. 相比alert他的优点是:他能看到结构话的东西,如果是alert ...

  3. 向大家分享一个shell脚本的坑

    打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...

  4. PHP多进程处理并行处理任务实例(转,备用)

    本文目的本文通过例子讲解linux环境下,使用php进行并发任务处理,以及如何通过pipe用于进程间的数据同步.PHP多进程通过pcntl_XXX系列函数使用多进程功能.注意:pcntl_XXX只能运 ...

  5. android 接受系统锁屏广播,及高版本发送广播

    protected BroadcastReceiver messageReceiver = new BroadcastReceiver() { @Override public void onRece ...

  6. 作为从业人员,如果一定要学一门新的编程语言,那么它一定是c++

    作为从业人员,如果一定要学一门新的编程语言,那么它一定是c++. 无论各种编程语言排行榜如何变化,什么语言最赚钱,想成为真正的程序员,那么c/c++是必修课,因为几乎所有的底层都是c/c++编写的,各 ...

  7. 20135234mqy-——信息安全系统设计基础第二周学习总结

    Linux基础 1.Linux命令 command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数 选项(options)或参数(argument ...

  8. 扩充巴科斯范式(ABNF)

    BNF:巴科斯范式ABNF(Augmented Backus-Naur Form):扩充巴科斯范式 ABNF是由第68号互联网标准(”STD 68″,大小写样式按照原文)定义的,也就是 RFC 523 ...

  9. TCP客户端【TcpClient】

    一.阻塞模式 1.命名空间 System.Net.Sockets 2.对象声明 TcpClient dpu1TcpClient = null;//dpu1tcp客户端,TcpClient模式 Netw ...

  10. cogs 2221. [SDOI2016 Round1] 数字配对

    ★★ 输入文件:pair.in 输出文件:pair.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两 ...