# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
1116011 |
2024-11-21T07:42:52 Z |
vjudge1 |
CSS (COI14_css) |
C++17 |
|
170 ms |
37448 KB |
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<unordered_map>
#define ll long long
using namespace std;
const int MAXN=5e3+10;
int n,m,tot,cnt;string s;
vector <int> f[MAXN],ans;
unordered_map <string,int> Classname;
vector <pair<vector<int>,bool>> Selector;
struct Div
{
int fa;string Name;vector <int> SonDiv;
unordered_map <int,bool> Class;
}D[MAXN];
inline bool Check(int x,int i)
{
for(int now:Selector[i].first)
if(D[x].Class.find(now)==D[x].Class.end()) return false;
return true;
}
void dfs(int x)
{
f[x].clear();
for(int i:f[D[x].fa])
{
if(f[x].empty()||f[x].back()!=i)
if(!Selector[i].second) f[x].push_back(i);
if(Check(x,i)) f[x].push_back(i+1);
}
if(!f[x].empty()&&f[x].back()==Selector.size())
ans.push_back(x),f[x].pop_back();
if(f[x].empty()) return ;
for(int y:D[x].SonDiv) dfs(y);
}
signed main()
{
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(0);
cin>>n,f[0].push_back(0);
for(int i=1,cur=0;i<=n;++i)
{
cin>>s;if(s=="</div>"){cur=D[cur].fa;continue;}
++tot,D[D[tot].fa=cur].SonDiv.push_back(tot);
cin>>s,D[tot].Name=s.substr(4,s.size()-5);
cin>>s,s.erase(0,7);
while(bool flag=true)
{
if(s.back()=='>')
flag=false,s.erase(s.size()-2,2);
if(!Classname[s]) Classname[s]=++cnt;
D[tot].Class[Classname[s]]=true;
if(!flag) break;cin>>s;
}cur=tot;
}
cin>>m,getline(cin,s);
while(m--)
{
Selector.clear(),getline(cin,s);
while(!islower(s.back())) s.pop_back();
s=s+' ';bool flag=false;
Selector.push_back({{},flag});
for(int i=0,j=0;;i=j)
{
j=i+1;while(islower(s[j])) ++j;
string now=s.substr(i+1,j-i-1);
if(Classname.find(now)==Classname.end())
{cout<<"0\n";goto end;}
Selector.back().first.push_back(Classname[now]);
if(j==s.size()-1) break;if(s[j]=='.') continue;
if(s[j+1]=='>') flag=true,j+=3;
else flag=false,j+=1;
Selector.push_back({{},flag});
}
for(int x:D[0].SonDiv) dfs(x);
cout<<ans.size()<<' ';
for(int x:ans) cout<<D[x].Name<<' ';
cout<<'\n',ans.clear();end:;
}
return 0;
}
Compilation message
css.cpp: In function 'void dfs(int)':
css.cpp:34:34: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::vector<std::pair<std::vector<int>, bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
34 | if(!f[x].empty()&&f[x].back()==Selector.size())
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~
css.cpp: In function 'int main()':
css.cpp:56:13: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
56 | if(!flag) break;cin>>s;
| ^~
css.cpp:56:29: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
56 | if(!flag) break;cin>>s;
| ^~~
css.cpp:73:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
73 | if(j==s.size()-1) break;if(s[j]=='.') continue;
| ~^~~~~~~~~~~~
css.cpp:73:13: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
73 | if(j==s.size()-1) break;if(s[j]=='.') continue;
| ^~
css.cpp:73:37: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
73 | if(j==s.size()-1) break;if(s[j]=='.') continue;
| ^~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
1104 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
2896 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
170 ms |
37448 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
16456 KB |
Output is correct |
2 |
Correct |
86 ms |
18508 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
83 ms |
16968 KB |
Output is correct |
2 |
Correct |
91 ms |
18760 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
1104 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
77 ms |
16640 KB |
Output is correct |
2 |
Correct |
131 ms |
34892 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
79 ms |
16968 KB |
Output is correct |
2 |
Correct |
81 ms |
18512 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
88 ms |
17224 KB |
Output is correct |
2 |
Correct |
140 ms |
34916 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
124 ms |
20552 KB |
Output is correct |
2 |
Correct |
81 ms |
18488 KB |
Output is correct |