這個模擬題需要記錄的是結構化文件,結構化文件需要記錄的有:標籤、id屬性、以及有層次的包含關係。使用struct記錄:
struct node
};
然後是如何讀入這個具有層次的結構化文件:
首先用vector< node* > nodes記錄每一行的文件內容(也記錄了這一行的下標);
然後stack< node* > parents來找出上一層次的行
輸入一行,讀入name,tag;需要稍微處理的就是當前node的上一層次是哪個,這個時候,就從stack棧中尋找,棧是始終level從小到大排列的。找到stack_top->level小於當前level的,就是當前node的上一層。
最後處理每乙個選擇器的內容:
核心部分是check:
bool
check
(node* t,
const string& s)
return
true
;}
大概過程就是:
vector< int > ans;//記錄結果
vector< string > sel;//儲存的是需要選擇的標籤或屬性(可能是1個,可能是2個)
然後check一下sel儲存那些選擇內容是否符合當前行,如果sel.size=2的話,還要處理符合的當前行的上一層(父親)是否符合sel[0](a)的選擇。
所以呢,這道題的核心就是如何儲存這個結構化的文件,如何找到當前行的上一層行。
#include
#include
#include
#include
#include
using
namespace std;
struct node};
void
divide
(const string& line,vector
& sel)
else token+
=line[i];}
sel.
push_back
(token);}
bool
check
(node* t,
const string& s)
return
true;}
intmain()
now-
>parent=p;
} parents.
push
(now)
;//當前的行壓棧
nodes.
push_back
(now)
;//記錄當前行}
vector<
int> ans;
//記錄結果
vector sel;
//儲存的是需要選擇的標籤或屬性(可能是1個,可能是2個)
while
(m--)if
(sl==-1
) ans.
push_back
(i+1);
//如果符合,加入這一行的下標}}
printf
("%d "
,ans.
size()
);for(
int i=
0;isize()
;i++
)printf
("%d "
,ans[i]);
if(m!=0)
printf
("\n");
}return0;
}
CSP 元素選擇器
思路參考 傳送門 唯一遇到的坑是選擇器也是可以重複出現在一條查詢裡的,而不是只能出現在最後。includeusing namespace std vectorres 儲存祖先 vectorqus 儲存查詢 vectorans 儲存答案 struct nodee 105 void tolower st...
CSP 元素選擇器
在一開始做這題的時候我直接構造了棵樹來儲存題目給出的html文件,但是後面遇到了各種奇奇怪怪的bug,感覺修不過來了,就重新構思了一遍。然後發現其實不需要用樹來儲存,直接陣列儲存就行了。思路如下 用陣列記錄下輸入的html文件,用vector記錄選擇器。非後代選擇器的查詢,只要遍歷一邊陣列,判斷其屬...
CSP201809 3 元素選擇器 模擬
用point來儲存結構化文件,裡面string label,string id為標籤和id,int c為所在層數,兩個點就為一層。讀入結構化文件 用getline讀入一行,然後計算出點的個數,層數就為點的個數除以2。接下來讀入label,因為label大小寫不敏感,將其全部轉換為小寫。如果字串還有剩...