CCF Python题解(100分)201809-3 元素选择器
n, m = map ( int , input ( ) . split( ) )
textlist = [ ]
for i in range ( n) :
text = input ( )
level = text. count( '.' ) // 2
tag = ""
id = ""
if len ( text. split( ) ) == 1 :
tag = text
else :
tag, id = text. split( )
tag = tag. strip( '.' )
pline = - 1
for j in range ( i - 1 , - 1 , - 1 ) :
if textlist[ j] [ 'level' ] == level - 1 :
pline = j + 1
break
textlist. append( { 'tag' : tag, 'id' : id , 'level' : level, 'pline' : pline, 'line' : i + 1 } )
def f ( pline, i, count) :
if pline - 1 < 0 :
return False
text = textlist[ pline - 1 ]
pline = text[ 'pline' ]
if select[ i] . upper( ) == text[ 'tag' ] . upper( ) or select[ i] == text[ 'id' ] :
count += 1
if i == 0 and count == len ( select) :
return True
else :
if f( pline, i - 1 , count) :
return True
else :
if f( pline, i, count) :
return True
else :
return False
for i in range ( m) :
select = input ( )
if len ( select. split( ) ) == 1 :
count = 0
str1 = ""
for text in textlist:
if text[ 'id' ] == select or text[ 'tag' ] . upper( ) == select. upper( ) :
count += 1
str1 += " " + str ( text[ 'line' ] )
print ( count, end= "" )
print ( str1)
else :
select = select. split( )
list = [ ]
j = len ( select) - 1
for text in textlist[ : : - 1 ] :
if text[ 'tag' ] . upper( ) == select[ j] . upper( ) or text[ 'id' ] == select[ j] :
line = text[ 'line' ]
pline = text[ 'pline' ]
if f( pline, j - 1 , 1 ) :
list . append( line)
print ( len ( list ) , ' ' . join( map ( str , list [ : : - 1 ] ) ) )