90pts但最后一个不是MLE求调
查看原帖
90pts但最后一个不是MLE求调
678358
sdsy1532楼主2023/10/20 20:41

根据楼下的方法,把bool换成了bitset,但是WA

求dalao调

90pts

#include<bits/stdc++.h>
using namespace std;

char a[10010];

int trie[500010][26];
int n,x,m,cnt,len,now,f;

//bool b[500010][300];
bitset<110> b[500010];

int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0' or c>'9')
	{
		if(c=='-')
			f=-1;
		c=getchar();
	}
	while(c>='0' and c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}

void insert(int x)
{
    scanf("%s",a+1);
	len=strlen(a+1),now=0;
    for(int i=1;i<=len;i++)
	{
        int p=a[i]-'a';
        if(!trie[now][p])         
			trie[now][p]=++cnt;   
        now=trie[now][p];         
    }
    b[now][x]=true;
}

void check()
{
    scanf("%s",a+1);
	len=strlen(a+1),now=0,f=1;
    for(int i=1;i<=len;i++)
	{
        int p=a[i]-'a';
        if(!trie[now][p])
		{
			f=0;
			break;
		}
        now=trie[now][p];
    }
    if(f)
		for(int i=1;i<=n;i++)
			if(b[now][i])
				printf("%d ",i);
    puts("");
}

int main()
{
    n=read();
    for(int i=1;i<=n;i++)
	{
        x=read();
        for(int j=1;j<=x;j++)
			insert(i);
    }
    m=read();
    for(int i=1;i<=m;i++)
		check();
    return 0;
}
2023/10/20 20:41
加载中...