CSP 201809 3元素選擇器

2021-10-07 02:42:30 字數 2128 閱讀 6228

題意:

模擬元素選擇。

分析:id選擇器和標籤選擇器的查詢都比較簡單,稍微麻煩的是後代選擇器。

我用了二維陣列儲存每個元素的祖先,第一維代表的是層級(冒號的個數除以2),第二維代表的是序號。

多級的後代選擇器在匹配時,可以採用貪心的策略:除最後一級外,前面的部分都可以盡量匹配層級小的元素。

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mem(a,b) memset(a,b,sizeof(a))

#define e 2.71828182

#define pi 3.141592654

using

namespace std;

struct node

ele[

101]

;//元素

bool

islegal

(string a, string b)

//兩個標籤是否相等(大小寫不敏感)

intmain()

else

//無id屬性

//找祖先

for(

int j =

1; j < i; j++)}

for(

int i =

1; i <= m; i++

)else

if(sel.

find

('#'

)!= string::npos && sel.

find

(' '

)== string::npos)

//id選擇器查詢

else

//後代選擇器

//子代是否滿足條件

str = temp.

top(

); temp.

pop();

if(str.

find

('#'

)== string::npos &&

!islegal

(str, ele[j]

.label)

)continue

;else

if(str.

find

('#'

)!= string::npos && str.

substr(1

)!= ele[j]

.id)

continue

;//父代是否滿足條件

int sum =0;

//找到的父代個數

for(

int p =

(ele[j]

.col -2)

/2; p >=

0; p--)}

else

//id

for(

int q =

0; q < ele[j]

.ance_id[p]

.size()

; q++)}

if(sum == cnt -1)

}}cout << ans <<

' ';

for(

int k =

1; k <= ans; k++

) cout << a[k]

<<

' ';

cout << endl;}}

}

csp 201809 3 元素選擇器

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

csp201809 3 元素選擇器

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

CSP 201809 3 元素選擇器

首先是儲存結構的設計,因為題目中要求有標籤 label 和屬性 id 兩種資料,所以結構體設計如下 struct node 其次,因為題目中使用縮排的大小來確定上下級也就是父子關係,所以對於每一行資料,也需要記錄其縮排的大小 struct node 在此之前,需要了解strtok 這個函式的用法 函...