CCF認證 201809 3元素選擇器

2021-10-08 01:48:44 字數 1029 閱讀 9778

大模擬

1、儲存 2、查詢

整體來看是樹形結構

總結:
結構體建立

struct element;

vectorelements(105);

//級數另外儲存

vector> series;

series[0][2]=3;表示行號為3的元素的級數為0 element[3]

讀取輸入

c++ getline函式讀取一行字串,行號(簡單),級數(.),標籤(擷取),父元素(擷取)

while(line[j]=='.') ++j;

//有下標為j/2的元素和沒有下標為j/2的元素

if(series.size()<=j/2) series.push_back();

else series[j/2].push_back(i);

//找到空格處

for(k=j;k讀取查詢元素資料vectorquery

查詢

vectorans;對於後代選擇器ab ,a是b的乙個祖先元素不一定是父元素

查詢選擇器是vectorquery ,包含元素數為query.size()  要從series[query.size()-1]到series末尾

找到b再判斷祖先

for(int i=query.size()-1;i=0&&p!=-1;p=elements[p].father)

if(elements[p].label==query[k]||elements[p].id==query[k])

k--;

if(k<0) ans.push_back(j);

}}printf("%d ",ans.size());

for(auto i:ans)

printf("%d ",i);

puts("");

CCF201809 3 元素選擇器

中文題見題面 其實一看到那個文件的表示方式,就很容易想到可以用一顆數來表示,查詢時直接遍歷樹即可。1 樹結點 每個節點儲存一行的標籤和id屬性,其結點編號為所在行號,即每行乙個結點。2 建樹 這裡建樹可能有兩個思路,乙個是遞迴建樹,即建樹邊輸入,這個在實際的操可能比較麻煩 可能要回溯到很久以前的結點...

CCF 201809 3 元素選擇器

試題編號 201809 3 試題名稱 元素選擇器 時間限制 1.0s 記憶體限制 256.0mb 問題描述 本 採用非遞迴暴力迴圈匹配 注意題目 標籤大小寫不敏感,id大小寫敏感 include define pb emplace back using namespace std const int...

201809 3 元素選擇器

ccf201809的第三題 題目就不粘上來了!設計思路 首先要用乙個結構體來儲存每一行文件,有等級 標籤以及id。其次需要注意的是標籤不區分大小寫!對於選擇器,大致可以分為兩種,第一種是只有單個的標籤或者id,這種直接遍歷文件即可 也就是我們處理過後的結點陣列 第二種是分層的,這種我們需要從選擇器的...