首先是儲存結構的設計,因為題目中要求有標籤(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...