求救
查看原帖
求救
251632
LANQINHAN楼主2021/7/11 16:27
#include<bits/stdc++.h> 
using namespace std;
int n,m,l;
bitset<500001> book[1001];//求是否有单词在i点结尾 
int ch[500000][30];//把所有单词做成一棵树 
int tot=1;
string s;
string word;
void Insert(string s,int N)
{
	int len=s.size();
	int p=1;//起点 
	for(int i=0;i<len;i++)
	{
		int q=s[i]-'a';//求q&&p 
		if(!ch[p][q])
		{
			ch[p][q]=++tot;//多推一个点进去 ; 
		}
		p=ch[p][q];//跳转 
	} 
	book[N][p]=1;//标记终点,以及是第几篇文章 
}
void find(string word)//s为要查找的字符串 
{
    int len=word.size();
    int p=1; 
    bool flag=0;
    for(int i=0;i<len;i++)
    {
        int q=word[i]-'a';
        if(!ch[p][q])
		{
		flag=1;
		break;;//单词没有出现,直接跳出 
        }  
        p=ch[p][q];//继续向下查找单词 
    }
    //扫描完了 
    if(!flag)//如果可能有这个单词 
    {
    for(int i=1;i<=n;i++)
    {
    	if(book[i][p])//如果单词在某个文章中出现了 
    	{
    		cout<<i<<" ";//打印编号 
		}
	}
	cout<<endl; 
	}
   
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    	cin>>l;
    	for(int j=1;j<=l;j++)
    	{
    		cin>>s;
    		Insert(s,i);//表明是第几篇文章的单词 
		}
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>word;
		find(word);//打印;
	}
	return 0;
}

求救,实在搞不动了,全WA,但样例这个鬼东西过了,帮忙看看

2021/7/11 16:27
加载中...