ACM-ICPC Beijing Online A The Book List
比赛的时候一眼就看出是字典树+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的更多相关文章
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
- 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 ...
- 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 ...
- 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 ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- 【转】ACM/ICPC生涯总结暨退役宣言—alpc55
转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...
- 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 ...
随机推荐
- VS2012提示突然没有了
重置Visual Studio可以解决此问题, 方法是从开始->Microsoft Visual Studio 2012->Visual Studio Tools->Visual ...
- python 展开嵌套的序列
将一个多层嵌套的序列展开成一个单层列表 可以写一个包含yield from 语句的递归生成器来轻松解决这个问题. from collections import Iterable def flatte ...
- 由浅入深之Tensorflow(3)----数据读取之TFRecords
转载自http://blog.csdn.net/u012759136/article/details/52232266 原文作者github地址 概述 关于Tensorflow读取数据,官网给出了三种 ...
- Mysql优化_内置profiling性能分析工具
如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK.一般的企业一般是DBA数据库工程师从监控里找到问题.DBA会告诉我们让我们来排查问题,那么可能很多种 ...
- 07: jquery.cookie操作cookie
1.1 jquery.cookie常用方法 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术 1. 添加一个"会话cookie" $.cook ...
- js 变量提升(JavaScript Scoping and Hoisting)
原文网址:http://www.cnblogs.com/betarabbit/archive/2012/01/28/2330446.html 这是一篇作者翻译过来的文章,未翻译的原文网址在这里:htt ...
- (GO_GTD_3)基于OpenCV和QT,建立Android图像处理程序
一.解决权限问题 图片采集了,处理了,如何保存?最直接的方法是使用imwrite,但是如果现在直接使用的话,比如会出现这样或那样的错误,因为我们现在是在android的环境下进行图像处理,所以 ...
- C# 计算传入的时间距离今天的时间差
/// <summary> /// 计算传入的时间距离今天的时间差 /// </summary> /// <param name="dt">&l ...
- P4113 [HEOI2012]采花 (莫队TLE)
思路 update 11.2 树状数组AC 本题莫队过不去,会TLE ----------------------- 但也是个不错的莫队练手题 ------------------------ 毕竟C ...
- attr返回被选元素的属性值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...