HTML 문서는 계층 구조를 가지고 있다. 이는 이름을 갖는 각 원소가 다른 원소들을 포함할 수 있다는 것을 의미한다. div 명령어만 들어있는 HTML 문서를 생각해보자. 이런 문서는 아래와 같은 형태로 구성되어 있다.
<div id='name' class='class1 class2 ... classK'> // 원소의 시작 ... // 원소의 내용 </div> // 원소의 끝
즉, 각각의 단일 원소는 시작 줄과 끝줄이 있고, 그 두 줄 사이에 빈 줄이 있거나 다른 원소들이 있을 수 있으며, 문서는 이런 원소들을 여러 개 포함하고 있다.
각 원소들의 이름은 알파벳 소문자로 이루어진 문자열이며, 서로 다르다. 이름이 E인 원소(원소 E)가 이름이 F인 원소(원소 F) 안에 들어있을 경우, ‘E가 F 안에 포함되어 있다’ 혹은 ‘F가 E를 포함한다’고 하자. 또, E가 F 안에 포함되어 있으면서, E를 포함하면서 F 안에 포함되어 있는 다른 원소 G가 존재하지 않는 경우, ‘F는 E의 부모 원소’라고 하자.
CSS는 스타일시트 언어로써 웹브라우저에서 HTML 문서의 구성 방식을 표현할 때 쓰인다. 이 언어의 주요 기능으로는 선택자(selector)와 분류자(classifier)가 있다.
분류자는 점을 이용해서 한 개 이상의 클래스를 나타내는데, 클래스는 알파벳 소문자로 이루어진 문자열이다. 예를 들어 ".banana.apple", ".banana", ".apple.banana.mango" 등이 모두 분류자이다. 각 분류자는 각각 2, 1, 3개의 클래스를 포함하고 있다. HTML 문서의 한 원소가 분류자를 포함한다는 것은 분류자에 속한 클래스들이 전부 그 원소에 나열되어 있다는 것을 의미한다.
선택자는 한 개 이상의 분류자들과 '>' 연산으로 이루어져 있다.
< div id=’name’ class=’class1 class2 . . . classK’> element beginning ... element content </div> element end
Thus, a single element consists of a line that detones its beginning, a line that denotes its end, and in between these two lines is the content of the element which can either be empty of consist of a series of other elements that can again contain other elements and so on. The document itself consists of a series of elements (some of which may contain other elements). Additionally, the following holds for a representation of an element:
The name of the element is an array of lowercase letters of the English alphabet. The name uniquely
identifies the element in the document, and no two different elements have the same name.
CSS is a style sheet language used for describing the look and formatting of HTML elements when seen
in a Web browser. An important part of that language are so-called selectors and classifiers. A classifier
is a series of characters that begins with a dot and is followed by one or more classes separated by dots.
Again, only lowercase letters of the English alphabet must appear in classes. Some examples of classifiers
are: ".banana.apple", ".banana", ".apple.banana.mango". These classifiers consist of two, one and three
classes, respectively. We say that a certain HTML element corresponds to a classifier if it belongs to all
classes that are listed in the classifier.
You are given a document which consists of N lines and you are given M selectors. Write a programme that
will, for each given selector, output the names of all elements that correspond to it. For each individual
selector, the names must be output in the order they appear in the given document.
The names of all elements and classes in the input data will consist of only lowercase letters of the English
alphabet and their length will not be greater than 20 characters.
Additionally, not a single line in the input data will be longer than 5 000 characters and the sum of the
lengths of all the lines in the input will not exceed 5 000 000.
입력
출력
For each selector in the input data, output a single line. Firstly, output the number of elements that
correspond to the given selector and then the names of corresponding elements in aforementioned order.
SCORING
In test cases worth 50% of total points, it will hold that selectors will not contain the character ‘>’.
입출력 예
input
22
<div id=’a’ class=’banana mango’>
<div id=’b’ class=’orange’>
<div id=’c’ class=’banana’>
<div id=’d’ class=’apple mango orange’>
<div id=’e’ class=’orange’>
</div>
</div>
</div>
</div>
<div id=’f’ class=’orange apple’>
<div id=’g’ class=’apple’>
<div id=’h’ class=’orange apple’>
<div id=’i’ class=’banana’>
</div>
</div>
</div>
<div id=’j’ class=’banana’>
</div>
</div>
</div>
<div id=’k’ class=’glupo voce daj mi sarme’>
</div>
5
.banana
.banana > .sarme
.banana > .orange > .banana
.banana .apple.orange > .orange
.mango > .orange .banana
output
4 a c i j
0
2 c j
1 e
3 c i j
출처:coci/2013-2014/contest7
번역:functionx
[질/답]
[제출 현황]
[푼 후(0)]