当前位置:网站首页>[dictionary tree] [trie] p3879 [tjoi2010] reading comprehension
[dictionary tree] [trie] p3879 [tjoi2010] reading comprehension
2022-07-06 07:23:00 【Chasing the beacon】
P3879 [TJOI2010] reading comprehension
Dictionary tree writing
#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
using namespace std;
int nex[300007][26],n,cnt=0;
bitset<1001> b[500007];//bool b[500007][1001];
void insert(char* s,int rol){
int len=strlen(s+1);
int now=0;
FOR(i,1,len){
int p=s[i]-'a';
if(!nex[now][p])// If $Trie$ The tree is numbered without the prefix of this word
nex[now][p]=++cnt;// The number mentioned above
now=nex[now][p];// Then go deeper , Update the current location
}
b[now][rol]=1;// This word is in the x There's a line
}
void check(char* s){
int len=strlen(s+1);
int now=0,flag=1;
FOR(i,1,len){
int p=s[i]-'a';
if(!nex[now][p]){
// If in Trie There is no current character in the tree , You can do it directly break It fell off
flag=0;
break;
}
now=nex[now][p];// Otherwise, update the location
}
if(flag){
FOR(i,1,n)// On the surface of the question, it is said to output in dictionary order
if(b[now][i]) cout<<i<<" ";// In which sentences does the output appear
}
putchar('\n');
}
int main(){
cin>>n;
char s[25];
FOR(i,1,n){
int l;cin>>l;
FOR(j,1,l){
// Word by word insertion Trie In the tree
cin>>(s+1);
insert(s,i);
}
}
int m;cin>>m;
FOR(i,1,m){
cin>>(s+1);
check(s);
}
return 0;
}
STL: MAP + VECTOR How to write it
use STL
You don't have to worry about how big the array is and how big the space is , But it will take more time
#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
const int maxn = 100001;
int n,m,num,cnt[maxn];
string s;
map<string,vector<int> >a;
int main(){
cin>>n;
FOR(i,1,n){
cin>>num;
FOR(j,1,num){
cin>>s;
a[s].push_back(i);// Every word is a vector, Save the number of sentences
}
}
cin>>m;
FOR(i,1,m){
cin>>s;
mem(cnt);//cnt Is to remove the heavy bucket . Every time you use it to output different queries, you need to clear .
int len=a[s].size();
FOR(j,0,len-1)
if(cnt[a[s][j]] == 0){
cout<<a[s][j]<<" ";
cnt[a[s][j]]++;// Remove weight with bucket
}
cout<<endl;
}
return 0;
}
STL: MAP + SET How to write it
use set
It can automatically remove the weight , More convenient . meanwhile Time consuming is excellent , Second only to handwriting Trie
#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
using namespace std;
map<string,set<int> > m;
int main(){
int n,p,l;
string s;
cin>>n;
FOR(i,1,n){
cin>>l;// The number of words
FOR(j,0,l-1){
cin>>s;// word
m[s].insert(i);
}
}
cin>>p;
while(p--){
cin>>s;
if(m.count(s)){
// If m There are elements in s
for(auto iter=m[s].begin();iter!=m[s].end();++iter)
cout<<*iter<<" ";
}
cout<<endl;
}
return 0;
}
边栏推荐
- Get/post/put/patch/delete meaning
- Typescript function definition
- How Navicat imports MySQL scripts
- Markdown 中设置图片图注
- NiO programming introduction
- 杰理之如若需要大包发送,需要手机端修改 MTU【篇】
- Set picture annotation in markdown
- If Jerry's Bluetooth device wants to send data to the mobile phone, the mobile phone needs to open the notify channel first [article]
- TypeScript void 基础类型
- 树莓派串口登录与SSH登录方法
猜你喜欢
ORACLE列转行--某字段按指定分隔符转多行
呆错图床系统源码图片CDN加速与破解防盗链功能
【mysql学习笔记30】锁(非教程)
Internal and external troubles of "boring ape" bayc
Configure raspberry pie access network
[MySQL learning notes 32] mvcc
The best way to learn SEO: search engine
[window] when the Microsoft Store is deleted locally, how to reinstall it in three steps
作者已死?AI正用藝術征服人類
SSM learning
随机推荐
(4) Web security | penetration testing | network security web site source code and related analysis
树莓派串口登录与SSH登录方法
Bugku CTF daily question: do you want seeds? Blackmailed
[window] when the Microsoft Store is deleted locally, how to reinstall it in three steps
软件测试界的三无简历,企业拿什么来招聘你,石沉大海的简历
Ble of Jerry [chapter]
Project GFS data download
Typescript void base type
OpenGL ES 学习初识(1)
word中把带有某个符号的行全部选中,更改为标题
If Jerry's Bluetooth device wants to send data to the mobile phone, the mobile phone needs to open the notify channel first [article]
网络安全基础介绍
Detailed explanation | detailed explanation of internal mechanism of industrial robot
杰理之BLE【篇】
word怎么只删除英语保留汉语或删除汉语保留英文
杰理之需要修改 gatt 的 profile 定义【篇】
Oracle column to row -- a field is converted to multiple rows according to the specified separator
How are the open source Netease cloud music API projects implemented?
杰理之AD 系列 MIDI 功能说明【篇】
#systemverilog# 可綜合模型的結構總結