題意:
模擬元素選擇。
分析: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 這個函式的用法 函...