題目要求寫乙個簡易的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春...