201809 3 元素選擇器

2021-10-06 20:30:55 字數 2511 閱讀 1940

題目描述

解題思路

定義node,裡面有他的id,和他的標籤,還有他的縮排。

由於標籤大小寫不敏感,那就全部轉換成小寫

如果沒有標籤那麼就把標籤置為空

查詢的時候分成兩個,是否是後代選擇器;

如果不是的話,判斷是不是標籤查詢,如果是標籤查詢(標籤查詢大小寫不敏感)轉換成全小寫進行匹配

如果是後代選擇器,用map存下來所有的標籤和id,然後進行匹配

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int n=

105;

struct nodea[n]

;vectordemand;

mapint>an,query;

//an表示各個祖先含有的標籤,id屬性等,query表示要查詢的

//將字串s化為小寫串

string mystrlwr

(string s)

//以空格進行分割字串s,並將分割結果儲存在向量v中

void

split

(char

*s,vector

&v)}

intmain()

//獲取標籤

int len=

0,pos=-1

;//如果有#,pos就記錄#的下標

for(

int j=cnt;j

length()

;j++

,len++)if

(s[j]

==' '

) a[i]

.d=cnt;

a[i]

.lable=s.

substr

(cnt,len)

;//由於標籤的匹配大小寫不敏感,因此化為小寫

a[i]

.lable=

mystrlwr

(a[i]

.lable);if

(pos==-1

)//如果沒有id屬性,就讓id=""

a[i]

.id="";

else

a[i]

.id=s.

substr

(pos);}

while

(m--

)else

string q=demand.

back()

;if(q[0]!=

'#')

//查詢標籤大小寫不敏感

q=mystrlwr

(q);

//化為小寫

//進行匹配

for(

int i=

1;i<=n;i++)if

(q==a[i]

.lable||q==a[i]

.id)

//判斷是否符合條件

bool flag=

true

;//遍歷查詢的所有id選擇器和標籤選擇器

for(map

int>

::iterator it=query.

begin()

;it!=query.

end(

);it++)if

(an.

count

(it-

>first)==0

||an[it-

>first]

>second)

if(flag)

ans.

push_back

(i);}}

printf

("%d"

,ans.

size()

);for(

int i=

0;isize()

;i++

)printf

(" %d"

,ans[i]);

printf

("\n");

}return0;

}

201809 3 元素選擇器

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

201809 3 元素選擇器

模擬題,細心細心再細心,整個結構是乙個樹型的結構。include include include include include includeusing namespace std typedef long long ll const int inf 0x3f3f3f3f const double...

201809 3 元素選擇器

試題編號 201809 3 試題名稱 元素選擇器 時間限制 1.0s 記憶體限制 256.0mb 問題描述 注意 1 乙個元素的祖先是緊接著其上的縮排小於等於其縮排的那些元素 連續的區域 中的縮排小於其縮排的元素 沒有等於的元素,等於的元素只是起一種連線作用 2 後代選擇器只能是多個id或者是多個l...