CCF 201809-3 2018年9月第三题元素选择器(python 100分题解)
2018-09-16 20:49
411 查看
问题描述
试题编号: | 3 |
试题名称: | 元素选择器 |
时间限制: | 10.0s |
内存限制: | 512.0MB |
问题描述: |
|
提交后100分代码:
注意标签选择器大小写不敏感,匹配时都 4000 转成小写,id选择器大小写敏感直接匹配
[code]#元素选择器 #输入 n,m=map(int,input().split()) doc = [] sel = [] #结构化文档内容 for i in range(n): doc.append(input()) #带查询的选择器 for i in range(m): sel.append(input()) #解析文档结构 cons = [] for i in range(n): level = doc[i].count('.')//2 tag = "" tid = "" if(len(doc[i].split())==1): tag = doc[i][level*2:] else: left,right = doc[i].split() tag = left[level*2:]#标签大小写不敏感 tid = right#id大小写敏感 pline = -1; for j in range(i-1,0-1,-1): if(cons[j]["level"]==level-1): pline = j+1; break; cons.append({"tag":tag,"id":tid,"level":level,"pline":pline})#将信息存为字典添加到列表中 #元素选择器选择 collection=[]#结果保存列表 for i in range(m): collection.append([]) if(len(sel[i].split())==1):#选择器不含空格 if(sel[i][0]!='#'):#标签选择器 for j in range(n): if(cons[j]["tag"].lower() == sel[i].lower()):#标签大小写不敏感 collection[i].append(j+1) else:#id选择器 for j in range(n): if(cons[j]["id"] == sel[i]):#id大小写敏感 collection[i].append(j+1) else:#后代选择器 p = sel[i].split() for j in range(n): parent = j+1 k=len(p)-1 while k>=0:#从后向前迭代检查是否匹配 match =False if(p[k][0]!='#'): if(cons[parent-1]["tag"].lower() == p[k].lower()): match = True else: if(parent == j+1 and k==len(p)-1):#第一次必须匹配上不然直接退出 break else: if(cons[parent-1]["id"] == p[k]): match = True else: if(parent == j+1 and k==len(p)-1): break if(match): k-=1 if(k<0):#匹配成功 collection[i].append(j+1) break if(cons[parent-1]["pline"]==-1):#没有父节点了仍未匹配成功即匹配失败 break#匹配失败退出 parent = cons[parent-1]["pline"]#取父节点继续检查匹配 #输出 for x in collection: print(len(x)," ".join(map(str,x)))
阅读更多
相关文章推荐
- python ccf题解 201809-2 买菜
- python ccf 题解历年100分(更新中)
- python—第三库的安装方法
- 【CCF CSP】 201604-2 俄罗斯方块(100分)
- 可爱的 Python : Python中的函数式编程,第三部分
- python web框架企业实战具体解释(第六期)\第三课时-ajax&jquery&webpy
- idapython让生活变得更美好:第三部分(条件断点)
- python基础第三课 循环 列表
- Python第三站-深入文件与异常(数据持久化)
- Po学校Python第三课(list元组循环)
- 第六届CCF计算机职业资格认证考试题解(第三题)
- CCF CSP 201712-2 游戏(Java-100分)
- CCF CSP 201709-2 公共钥匙盒(Java-100分)
- [第三弹]Python正则表达式基础
- 第五届计算机职业资格认证考试CCF (第三题)
- CCF-CSP 交通规划 JAVA 2016-09-04 100分
- Python学习笔记-Day03 -第三部分(迭代器和生成简介)
- 2014年首届CCF软件能力认证试题第三题 .
- CCF CSP 201703-1 分蛋糕(Java-100分)