csp 201809 3 元素選擇器

2021-10-06 23:03:25 字數 1888 閱讀 3105

題目描述

201809-3

試題名稱

元素選擇器

時間限制

1.0s

記憶體限制

256.0mb

題目背景

題目描述

由題可知,結構化文件由元素組成,而這些元素是以一棵樹得形式組織起來的。

我們這裡使用結構體來儲存每乙個元素,結構體內包含元素標籤(name),元素id(id),元素所在層級(level用於輔助標記父節點)以及元素父節點所在位置(father)。

讀入時,我們首先給節點標籤與id賦值,這裡同時將標籤內的字元變為小寫,然後尋找該節點的父節點,若其之前的節點層次比他低或者層次相同(『.』的數目比其要多或者一樣),則其之前的節點一定不會再有子節點,可以從棧中彈出,直到遇到第乙個層次比當前節點高的節點,即為當前節點的父節點,然後再把當前節點壓入棧。

對於每乙個元素選擇器,使用乙個vector容器ques將要選擇的元素及其祖先元素儲存起來。遍歷節點,如果元素相同,然後開始比較其祖先節點,如果都存在,則將節點所在陣列中的位置加1(即為其所在行數)壓入vector容器res中,遍歷完節點陣列後,res中儲存的元素所在行即為所求。

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

105;

int n, m;

string s;

vector<

int> st;

struct ele

node[maxn]

;void

lower

(string& str)

void

deal

(int i)

node[i]

.father = tmp;

} st.

push_back

(i);

}vector<

int> res;

vector ques;

bool

match

(int i)

if(tot >=0)

return

false

;return

true;}

void

solve()

for(

int i =

0; i < n; i++)}

intmain()

for(

int i =

0; i < m; i++

)return0;

}

csp201809 3 元素選擇器

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

CSP 201809 3元素選擇器

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

CSP 201809 3 元素選擇器

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