HDU 4964 Emmet --模拟
题意:给你一个字符串,要求把它按语法转化成HTML格式。
分析:这题其实不难,就是一个递归的事情,当时忽略了括号嵌套的情况,所以一直WA,后来加上这种情况后就过了。简直醉了。
处理id和class时,在一个'>'内,先把遇到的id和class都push到一个容器中,然后再输出即可。
这题要注意的地方: 1.括号以及括号嵌套 2.好像没了
代码有点长,将就看吧。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
using namespace std; string S; inline int StoNum(string str)
{
int num = atoi(str.c_str());
return num;
} void print(int u,int v)
{
int i;
if(u >= v)
return;
for(i=u;i<v;i++)
{
if(S[i] == '>')
break;
}
int endi,sta = u;
if(i == v) endi = v;
else endi = i;
if(S[u] == '(')
{
int cnt = ;
for(i=u+;i<v;i++)
{
if(S[i] == ')' && cnt == ) break;
else if(S[i] == ')') cnt--;
else if(S[i] == '(') cnt++;
}
sta = u+;
endi = i;
print(sta,endi);
print(endi+,v);
return;
}
int flag = ; // 0:div 1:id 2:class 3:multi
string divi = "",classi = "",idd = "",multi = "";
vector<string> cls,id;
cls.clear(),id.clear();
vector<pair<int,int> > kuo;
kuo.clear();
for(i=sta;i<endi;i++)
{
if(S[i] != '#' && S[i] != '*' && S[i] != '.' && S[i] != '(')
{
if(flag == ) divi += S[i];
else if(flag == ) idd += S[i];
else if(flag == ) classi += S[i];
else if(flag == ) multi += S[i];
}
else if(S[i] == '#') // 0:div 1:id 2:class 3:multi
{
if(flag == )
{
id.push_back(idd);
idd = "";
}
else if(flag == )
{
cls.push_back(classi);
classi = "";
}
flag = ;
}
else if(S[i] == '.')
{
if(flag == )
{
id.push_back(idd);
idd = "";
}
else if(flag == )
{
cls.push_back(classi);
classi = "";
}
flag = ;
}
else if(S[i] == '*')
{
if(flag == )
{
id.push_back(idd);
idd = "";
}
else if(flag == )
{
cls.push_back(classi);
classi = "";
}
flag = ;
multi = "";
}
else if(S[i] == '(')
{
int now;
int cnt = ;
for(now=i+;now<endi;now++)
{
if(S[now] == ')' && cnt == ) break;
else if(S[now] == ')') cnt--;
else if(S[now] == '(') cnt++;
}
kuo.push_back(make_pair(i+,now));
i = now;
}
}
if(idd != "")
id.push_back(idd);
if(classi != "")
cls.push_back(classi);
int num = ;
if(multi != "")
num = StoNum(multi);
for(int k=;k<num;k++)
{
cout<<"<"<<divi;
if(id.size() != || cls.size() != )
cout<<" ";
if(id.size())
{
cout<<"id=\"";
cout<<id[];
for(i=;i<id.size();i++)
cout<<" "<<id[i];
cout<<"\"";
}
if(cls.size())
{
if(id.size())
cout<<" ";
cout<<"class=\"";
cout<<cls[];
for(i=;i<cls.size();i++)
cout<<" "<<cls[i];
cout<<"\"";
}
cout<<">";
if(kuo.size())
{
for(i=;i<kuo.size();i++)
print(kuo[i].first,kuo[i].second);
}
print(endi+,v);
cout<<"</"<<divi<<">";
}
} int main()
{
int n;
scanf("%d",&n);
while(n--)
{
cin>>S;
print(,S.length());
puts("");
}
return ;
}
HDU 4964 Emmet --模拟的更多相关文章
- hdu 4964 恶心模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4964 给定语句,按照语法翻译html并输出. 就是恶心的模拟,递归搞就行了 处理id和class时,在一个'&g ...
- HDU 4121 Xiangqi 模拟题
Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...
- hdu 5071 Chat(模拟)
题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...
- hdu 4740【模拟+深搜】.cpp
题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...
- HDU 2568[前进]模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2568 关键思想:傻傻地模拟 代码如下: #include<iostream> using ...
- HDU 5965 枚举模拟 + dp(?)
ccpc合肥站的重现...一看就觉得是dp 然后强行搞出来一个转移方程 即 根据第i-1列的需求和i-1 i-2列的枚举摆放 可以得出i列摆放的种类..加了n多if语句...最后感觉怎么都能过了..然 ...
- HDU 5083 Instruction --模拟
题意:给出汇编指令,解释出编码或者给出编码,解释出汇编指令. 解法:简单模拟,按照给出的规则一步一步来就好了,主要是注意“SET”的情况,还有要输出的东西最好放到最后一起输出,中间如果一旦不对就可以及 ...
- HDU 1707 简单模拟 Spring-outing Decision
Spring-outing Decision Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 5918 KMP/模拟
Sequence I Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
随机推荐
- C语言范例学习03-中
栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...
- PHP学习笔记:APACHE配置虚拟目录、一个站点使用多域名配置方式
我用的是xmapp lite2016的集成包,配置虚拟目录教程如下: 找到httpd-vhosts.conf这个文件,这个文件一般是在xampp\apache\conf\extra这个路径下面,找不到 ...
- sublimeCodeIntel 的配置
在项目的根目录目录下建立.codeintel/config 但是在windows 需要进入dos 环境下建立.以点开头的文件夹和文件.资源管理器不允许创建点开头的文件或文件夹,但在命令提示符下是可以的 ...
- SFTP和FTS协议的区别
都是为FTP连接加密,协议非常相似.一个是借助SSL协议加密,一个时借助SSH协议加密.SSL是为HTTP/SMTP等加密设计的:SSH是为TELNET/FTP等加密.建立传输通道而设计的.其实SSH ...
- XML的解析方式(Java)
dom方式解析 根据XML的层级结构在内存中分配一个树形结构,把XML的标签.属性和文本都封装成对象 优点:如果很方便实现增删改操作 缺点:如果文件过大,会造成内存溢出 sax方式解析 采用事件驱 ...
- 精简CSS代码
精简CSS代码可以帮助减小样式文件的大小,使代码清晰,方便维护. 使用简写属性及默认值 .header { margin-top: 10px; margin-right: 20px; margin-b ...
- ABAP SY-SUBRC 使用过程中返回值的几种含义
当进行Debug的时候,经常会遇到"SY-SUBRC"的返回值.具体如何使用.在各种语句下返回值. ================= FUNCTION MODULE (或RFC中 ...
- 解决Win10服务主机本地系统网络受限
换成win10有一段时间了,界面风格比win7好看,但有部分程序还是不兼容,还好用虚拟机可以将就解决.但有一个问题一直困扰了我好久,今天终于解决了. 问题描述 在进程中,服务主机:本地系统(网络受限) ...
- Spark中的RDD操作简介
map(func) 对数据集中的元素逐一处理,变为新的元素,但一个输入元素只能有一个输出元素 scala> pairData.collect() res6: Array[Int] = Array ...
- 在Windows下将code style导入到Android Studio的方法
很多网站上提供了Ahdroid studio的“代码样式”文件,那么作为win平台的用户,我们就需要学会如何导入这个样式文件.我也是查了很久才知道是怎么导入的,下面就是我的经验分享. 一.下载代码样式 ...