You are on page 1of 1

1 #include <cmath>

2 #include <cstdio>
3 #include <vector>
4 #include <iostream>
5 #include <algorithm>
6 #include <map>
7 using namespace std;
8
9 vector<string> tag_stack;
10 map<string, string> attrs;
11
12
13 void insert_attr(string & name, string & val) {
14 string full;
15 for(string & str : tag_stack)
16 full += str + ".";
17 full.pop_back();
18 full += "~" + name;
19 attrs[full] = val;
20
21 }
22
23 int main() {
24 int n, q;
25 cin >> n >> q;
26
27 for(int i = 0; i < n; ++i) {
28 char c; cin >> c;
29 if(cin.peek() == '/') { // close
30 string cn; cin >> cn;
31 tag_stack.pop_back();
32 }
33 else { //open'
34 string name;
35 cin >> name;
36 if(name.back() == '>') { //no attrs
37 name.pop_back();
38 tag_stack.push_back(name);
39 }
40 else {
41 tag_stack.push_back(name);
42
43 for(;;) {
44 string attr_name, attr_val, eq;
45 cin >> attr_name >> eq >> attr_val;
46 if(attr_val.back() == '>') { //last attr
47 attr_val.pop_back();
48 attr_val.pop_back();
49 attr_val = attr_val.substr(1);
50 insert_attr(attr_name, attr_val);
51 break;
52 }
53 else {
54 attr_val.pop_back();
55 attr_val = attr_val.substr(1);
56 insert_attr(attr_name, attr_val);
57 }
58 }
59 }
60
61 }
62 }
63
64 for(int i = 0; i < q; ++i) {
65 string quer;
66 cin >> quer;
67 if(attrs.find(quer) != attrs.end())
68 cout << attrs[quer] << endl;
69 else
70 cout << "Not Found!" << endl;
71 }
72
73
74 return 0;
75 }

You might also like