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 ...
随机推荐
- EffectiveJava——接口优于抽象类
Java程序设计语言提供两种机制,可以用来定义允许多个实现的类型:接口和抽象方法,这两者直接醉为明显的区别在于,抽象类允许某些方法的实现,但接口不允许,一个更为重要的区别在于,为了实现由抽象类定义的类 ...
- Jquery学习笔记:利用jquery获取select下拉框的值
jquery不是特别熟练,每次使用不常用的就要百度,特地记录下来. 我的下拉框是: <div class="form-group"> <select class= ...
- js实现点击<li>标签弹出其索引值
据说这是一道笔试题,以下是代码,没什么要文字叙述的,就是点击哪个<li>弹出哪个<li>的索引值即可: <html> <head> <style& ...
- elasticseach multi-field的实际用途
下面是multi-field的介绍: multi_field 多域类型允许你对同一个值以映射的方式定义成多个基本类型 core_types . 这个非常有用,比如,如果你定义一个 string 类型的 ...
- artTemplate 介绍
artTemplate 是新一代 javascript 模板引擎,它采用预编译方式让性能有了质的飞跃,并且充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现. 编 ...
- 为什么要选择Sublime Text3?
为什么要选择Sublime Text3? Sublime Text3 自动保存,打开图片 跨平台启动快!!!!多行游标,太好用. 插件,简直选不过来. 代码片段 VIM兼容模式 菜单栏基础功能介绍 F ...
- SAPScript、Smartforms动态打印图像或者背景图片
在利用 SMARTFORMS 进行打印的时候有时候要求输出的图片可能是随着打印内容的不同而不同了,也就是动态输出图片,SMARTFORMS的提供了相关的支持技术,下面是实现截图 1.创建要显示的图片 ...
- GP的使用心得
在ArcEngine时,GP无疑是GIS开发者的神器.自ArcEngine9.2开始新增一个程序集ESRI.ArcGIS.Geoprocessor,它能调用包含扩展模块在内的所有Geoprocessi ...
- andriod 用户名和密码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 实验12:Problem C: 重载字符的加减法
Home Web Board ProblemSet Standing Status Statistics Problem C: 重载字符的加减法 Problem C: 重载字符的加减法 Time ...