CCF CSP題解 201809 3 元素選擇器

2022-07-20 04:21:07 字數 1433 閱讀 8743

題目要求寫乙個簡易的css selector。

首先用結構體\(\)儲存元素。其中\(lev\)表示元素在html樹中的深度(這個是因為邏輯凌亂才加上的

接著用鏈式前向星儲存html元素樹。這裡用乙個棧\(rootstack\)方便找到新元素的父親節點\(temp\)。

三種選擇器都可以歸結為第三種方式——後代選擇器。

題目裡已經給了演算法:在匹配時,可以採用貪心的策略,除最後一級外,前面的部分都可以盡量匹配層級小的元素。寫個dfs就好了。

注意標籤不區分大小寫,不可以直接用strcmp的。

字串處理有點不方便。要熟練掌握%s,%[^],getchar,fgets,sscanf及相關函式。

#include const int maxn = 100;

const int maxm = 80; // max length of one element

using namespace std;

char line[maxm+10];

struct telement

};telement element[maxn+10];

int to[maxn+10];

int nex[maxn+10];

int head[maxn+10];

char selector[maxm/2+10][maxm+10];

bool labelequal(char s1, char s2)

return true;

}priority_queue, greater> q;

int num;

void dfs(int x, int cnt, int cnt0)

}else}}

else

for (int i = head[x]; i != -1; i = nex[i])

}}int main()

element[i].lev = dotnum / 2;

if (!rootstack.empty())

int temp = rootstack.top();

to[cnt] = i;

nex[cnt] = head[temp];

head[temp] = cnt++;

}rootstack.push(i);

sscanf(line + dotnum + 1, "%s", element[i].label);

if (line[dotnum + strlen(element[i].label) + 1] == ' ')

}while (m--)

num = 0;

dfs(1, 1, cnt);

printf("%d", num);

while (num != 0)

printf("\n");

}return 0;

}

201809 3 ccf csp 元素選擇器

題目所給出的結構化文件是乙個樹形結構,但由於其輸入中使用的是小數點的數量來計算層次,因此我們可以構建乙個結構體來儲存每行的元素。include using namespace std struct node 由於元素標籤是不區分大小寫的,因此不論是每個元素結構體的name,還是後面選擇器的name查...

CCF CSP題解 201512 4 送貨

求字典序最小尤拉路。似乎不能用 fluery 演算法 o e 2 fluery 演算法的思路是 延申的邊盡可能不是除去已走過邊的圖的橋 割 每走一步都要判斷是否是割,應當會超時。採用 hierholzer 演算法 o v e 亦稱逐步插入迴路法。思路見 注意根據題意,每次選取未走過頂點最小的邊延申。...

ccf csp 歷年真題題解

更新中 ccf csp 2013冬季真題題解 ccf csp 2014春季真題題解 ccf csp 2014秋季真題題解 ccf csp 2014冬季真題題解 ccf csp 2015春季真題題解 ccf csp 2015秋季真題題解 ccf csp 2015冬季真題題解 ccf csp 2016春...