CCF历届真题 部分题解 ,点击进入
问题描述
试题编号: | 201703-3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
试题名称: | Markdown | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
时间限制: | 1.0s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
内存限制: | 256.0MB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
问题描述: | 问题描述 Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档。例如以下这段文本就是用 Markdown 的语法写成的:
输入格式 输入由若干行组成,表示一个用本题规定的 Markdown 语法撰写的文档。 输出格式 输出由若干行组成,表示输入的 Markdown 文档转换成产生的 HTML 代码。 样例输入 # Hello 样例输出 <h1>Hello</h1> 评测用例规模与约定 本题的测试点满足以下条件:●本题每个测试点的输入数据所包含的行数都不超过100,每行字符的个数(包括行末换行符)都不超过100。 ●除了换行符之外,所有字符都是 ASCII 码 32 至 126 的可打印字符。 ●每行行首和行末都不会出现空格字符。 ●输入数据除了 Markdown 语法所需,内容中不会出现 `#`、`*`、`_`、`[`、`]`、`(`、`)`、`<`、`>`、`&` 这些字符。 ●所有测试点均符合题目所规定的 Markdown 语法,你的程序不需要考虑语法错误的情况。 每个测试点包含的语法规则如下表所示,其中“√”表示包含,“×”表示不包含。
|
import sys
text=[]
ul_sign=1
p_sign=1
for line in sys.stdin.readlines():line=line.strip()if '#' in line:h=line.count('#')line='<h'+str(h)+'>'+line[h+1:]+'</h'+str(h)+'>'elif '*' in line:if ul_sign==1:text.append('<ul>')ul_sign=0line='<li>'+line[2:]+'</li>'else:if line and p_sign==1:line='<p>'+linep_sign=0elif not line and p_sign==0:text[-1]=text[-1]+'</p>'p_sign=1elif not line and ul_sign==0:text.append('</ul>')ul_sign=1count=1while '_' in line:if count==1:index=line.index('_')line=line[:index]+'<em>'+line[index+1:]count+=1else:index=line.index('_')line=line[:index]+'</em>'+line[index+1:]count=1while '[' in line:a=line.index('[')b=line.index(']')c=line.index('(')d=line.index(')')line=line[:a]+'<a href="'+line[c+1:d]+'">'+line[a+1:b]+'</a>'+line[d+1:]text.append(line)
if ul_sign==0:text.append('</ul>')
if p_sign==0:text[-1]=text[-1]+'</p>'
for i in text:if not i:continueprint(i)