題目描述
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 這個函式的用法 函...