csp模擬 元素選擇器

2021-10-07 03:51:43 字數 1853 閱讀 2199

這個模擬題需要記錄的是結構化文件,結構化文件需要記錄的有:標籤、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大小寫不敏感,將其全部轉換為小寫。如果字串還有剩...