CSP 201809 3 元素選擇器 C

2021-10-06 20:30:55 字數 2567 閱讀 3977

問題解決方法過程及結構如下圖所示

其中,read負責讀取層疊樣式資訊,read_query負責讀取查詢資訊(讀取一條處理一條),query負責處理一條查詢資訊,query_one負責處理元素標籤選擇器和id選擇器,query_muti負責處理後代選擇器。lwr可以將乙個字串中所有的大寫字母變為小寫,並返回。

層疊樣式資訊儲存在陣列ele[2][1000]中,其中ele[0][i]表示第i行的標籤名,ele[1][i]表示第i行的id(若不存在則為空字串)。另外,第i行的級數(也就是第i行 『.』 的數量除以2)儲存在lv[i]中。

該函式的引數如下表所示:

型別名稱

注釋string &

s要查詢的標籤名或id

intst

表示查詢的起始位置,在st行標籤的子標籤中查詢

int &

resn

用來統計符合要求的標籤數量

int

lines

用來儲存所有符合要求標籤的行號(從小到大公升序儲存)

該函式思路比較簡單,只需從st+1行開始依次向下搜尋,如果搜尋到第i行,該行的級數lv[i]≥lv[st],說明已經找完了st行標籤的所有子標籤,查詢完畢。

對於每乙個子標籤i(第i行的標籤):

如果符合要求,那麼將i存入lines[resn],resn加1。

最後返回是否找到了符合要求的標籤(bool型別)。

該函式的引數如下表所示:

型別名稱

注釋string

s依次儲存每一級的選擇器

intn

級數,及s陣列元素個數

intst

表示查詢的起始位置,在st行標籤的子標籤中查詢

intidx

當前查詢使用的選擇器(標籤或id)在s陣列中的索引號

int &

resn

用來統計符合要求的標籤數量

int

lines

用來儲存所有符合要求標籤的行號(從小到大公升序儲存)

這個函式是乙個遞迴函式。

如果當前要使用的選擇器是陣列中最後乙個(idx == n-1),那麼直接呼叫query_one進行查詢,並將query_one的結果(是否找到)返回。

否則,從st+1行開始尋找是否有符合要求的子標籤,遍歷及查詢方式與query_one相同。對於遍歷到的乙個符合要求的標籤i,呼叫函式query_muti(s, n, i, idx+1, resn, lines),並記錄返回值。若返回true,那麼本函式執行結束,返回true,否則繼續遍歷。若一直未找到符合要求的子標籤,返回false。

lwr、query、read、read_query思路見源**。利用query_one或query_muti處理後,最後按要求輸出resn和lines即可。

#include

#include

#include

using

namespace std;

int n, m;

string ele[2]

[1000];

int lv[

1000];

string lwr

(const string &s)

return res;

}void

read()

//讀取元素內容

ele[0]

[i]=

lwr(ele[0]

[i])

; lv[i]/=

2;}}

bool

query_one

(string &s,

int st,

int&resn,

int lines)

//處理單級選擇器

}return flag;

}bool

query_muti

(string s,

int n,

int st,

int idx,

int&resn,

int lines)

//處理多級選擇器

}return

false;}

}void

query

(string s,

int n)

//負責處理所有選擇器

void

read_query()

//讀取查詢資訊並查新

j++;query

(s, j);}

}int main ()/*

11 5

html

..head

....title

..body

....h1

....p #subtitle

....div #main

......h2

......p #one

......div

........p #two

p#subtitle

h3div p

div div p

*/

csp 201809 3 元素選擇器

題目描述 201809 3 試題名稱 元素選擇器 時間限制 1.0s 記憶體限制 256.0mb 題目背景 題目描述 由題可知,結構化文件由元素組成,而這些元素是以一棵樹得形式組織起來的。我們這裡使用結構體來儲存每乙個元素,結構體內包含元素標籤 name 元素id id 元素所在層級 level用於...

csp201809 3 元素選擇器

時間限制 1.0s 空間限制 由於標籤大小寫不敏感,因此在讀取標籤時,首先將標籤的字母全部轉為小寫。建立元素陣列儲存每乙個元素,建立乙個記錄所有id出現的陣列,便於查詢,減少複雜度。在讀取文件資料時,使用vector陣列來儲存上一級元素,用於查詢每個元素的上一級元素。有點類似棧 不是後代選擇器的情況...

CSP 201809 3元素選擇器

題意 模擬元素選擇。分析 id選擇器和標籤選擇器的查詢都比較簡單,稍微麻煩的是後代選擇器。我用了二維陣列儲存每個元素的祖先,第一維代表的是層級 冒號的個數除以2 第二維代表的是序號。多級的後代選擇器在匹配時,可以採用貪心的策略 除最後一級外,前面的部分都可以盡量匹配層級小的元素。如下 include...