CCF历届真题 部分题解 ,点击进入
问题描述
试题编号:201809-3试题名称:元素选择器时间限制:1.0s内存限制:256.0MB问题描述:
n,m=map(int,input().split()) doc=[] for i in range(n): s=input() level=s.count('..') tag='' sid='' if len(s.split())==1: tag=s[level*2:] else: tag,sid=s.split() tag=tag[level*2:] node=-1 for j in range(i-1,-1,-1): if doc[j]['level']==level-1: node=j break doc.append({'tag':tag,'sid':sid,'level':level,'node':node}) num=[] for i in range(m): s=input() num.append([]) flag=0 if len(s.split())==1: if s[0]!='#': for j in range(n): if doc[j]['tag'].lower()==s.lower(): num[i].append(j+1) flag+=1 else: for j in range(n): if doc[j]['sid']==s: num[i].append(j+1) flag+=1 else: s=s.split() for j in range(n): parent=j k=len(s)-1 while k>=0: macth=False if s[k][0]!='#': if doc[parent]['tag'].lower()==s[k].lower(): macth=True else: if parent==j and k==len(s)-1: break else: if doc[parent]['sid']==s[k]: macth=True else: if parent==j and k==len(s)-1: break if macth: k-=1 if k<0: num[i].append(j+1) flag+=1 break if doc[parent]['node']==-1: break parent=doc[parent]['node'] num[i].insert(0,flag) for i in num: print(' '.join(map(str,i)))
参考博文:https://blog.csdn.net/SL_logR/article/details/82729191
