csp201809 3 元素選擇器

2021-10-06 23:22:09 字數 1446 閱讀 4696

時間限制

1.0s

空間限制

由於標籤大小寫不敏感,因此在讀取標籤時,首先將標籤的字母全部轉為小寫。

建立元素陣列儲存每乙個元素,建立乙個記錄所有id出現的陣列,便於查詢,減少複雜度。在讀取文件資料時,使用vector陣列來儲存上一級元素,用於查詢每個元素的上一級元素。(有點類似棧)

不是後代選擇器的情況較為簡單,如果是標籤選擇器,把字母轉為小寫,然後遍歷元素陣列進行比較,如果是id選擇器,在id陣列中查詢每乙個有id的元素,進行比較即可。

後代選擇器,首先將選擇器通過空格分開,把每乙個選擇條件存入陣列中

二級後代選擇器:首先比較第二選擇條件,查到元素x後,在該元素的祖先元素中查詢是否有符合第乙個選擇條件的元素,如有則將x加入ans陣列中

多級後代選擇器:首先選擇最後乙個條件,進行查詢,如果查到x,在該元素的祖先元素中查詢依次符合前面各項條件的元素,如果全部符合,則將x加入ans陣列中

最後將ans陣列輸出即可

#include#include#include#include#includeusing namespace std;

struct element

};vectorele;//表示每行元素

vectorid1;

int main()

while(j0)

tmp.parent=parent[parent.size()-1];

} else if(parent.size()&&ele[parent[parent.size()-1]].level!=tmp.level)

ele.push_back(tmp);

parent.push_back(ele.size()-1);

if(tmp.id.size()>0)

id1.push_back(ele.size()-1);

} while(m--)

}if(query.size()==2)//二級後代選擇器

else

pa=ele[pa].parent;}}

}}else//多級後代選擇器

else

printf("0\n");

} }system("pause");

return 0;

}

csp 201809 3 元素選擇器

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

CSP 201809 3元素選擇器

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

CSP 201809 3 元素選擇器

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