CSP 201809 3 元素選擇器

2021-10-07 22:41:28 字數 2186 閱讀 1310

首先是儲存結構的設計,因為題目中要求有標籤(label)和屬性(id)兩種資料,所以結構體設計如下:

struct node

;

其次,因為題目中使用縮排的大小來確定上下級也就是父子關係,所以對於每一行資料,也需要記錄其縮排的大小:

struct node

;

在此之前,需要了解strtok()這個函式的用法;

函式宣告:char *strtok(char *str, const char *delim)

其作用是分解字串 str 為一組字串,delim 為分隔符。

程式思路:每次查詢,需要從後向前遍歷查詢,找到所有符合條件的標籤或者屬性所在的行數;

主要程式如下:

for

(int j =

1; j <= n;

++j)

if(k <0)

ans.

push_back

(j);}}

遍歷n行元素,如果查詢len ==

1,那麼說明查詢僅需要針對某一行,而不需要考慮其各級父親。

如果len >=

2,那麼說明需要考慮其祖先,此時需要檢索其祖先的id和label。

最後將滿足條件的行號記錄下來。

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

110;

struct node

;node str[n]

;//將字串全部轉化為小寫

void

strtolower

(string &s)

//匹配label或者id

bool

sch(

int& start,

int& cnt, string s)

}return

false;}

intmain()

str[i]

.cnt = cnt;

if(pos2 ==-1

)else

strtolower

(str[i]

.label);}

for(

int i =

0; i < m;

++i)

int len = q.

size()

;for

(int j =

0; j < len;

++j)

if(q[j][0

]!='#')

strtolower

(q[j]);

for(

int j =

1; j <= n;

++j)

if(k <0)

ans.

push_back

(j);}}

cout << ans.

size()

;for

(int j =

0; j < ans.

size()

;++j)

cout <<

" "<< ans[j]

; cout << endl;

}return0;

}

csp 201809 3 元素選擇器

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

csp201809 3 元素選擇器

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

CSP 201809 3元素選擇器

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