大模擬
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,這種直接遍歷文件即可 也就是我們處理過後的結點陣列 第二種是分層的,這種我們需要從選擇器的...