題目描述
解題思路
定義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...