社区讨论

我是妹子,刚学OI。全部WA显示too long,求大佬看一下谢谢

P3879[TJOI2010] 阅读理解参与者 10已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi7xksbh
此快照首次捕获于
2025/11/21 05:15
4 个月前
此快照最后确认于
2025/11/21 05:15
4 个月前
查看原帖
CPP
#include<cstdio>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define rgi register int 
#define maxn 100005
#define N 500005
using namespace std;
int n,m,trie[N][100],tot,ans[maxn];
string s;
bitset<N>num[1005];
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    for(;!isdigit(c);c=getchar())
        if(c=='-')
            f=-1;
    for(;isdigit(c);c=getchar())
        x=(x<<3)+(x<<1)+c-'0';
    return x*f;
}
void upd(int k,string s)
{
    int p=0;
    for(int i=0;i<s.size();i++)
    {
        if(!trie[p][s[i]-'A'])
            trie[p][s[i]-'A']=++tot;
        p=trie[p][s[i]-'A'];
    }
    num[k][p]=1;
}
inline bool check(int k,string s)
{
    int p=0;
    for(int i=0;i<s.size();i++)p=trie[p][s[i]-'A'];
    return num[k][p];
}
int main()
{
    n=read();
    for(rgi i=1;i<=n;++i)
    {
        m=read();
        for(rgi j=1;j<=m;j++)
        {
            cin>>s;
            upd(i,s);
        }
    }
    m=read();
    for(rgi i=1;i<=m;++i)
    {
        cin>>s;
        int tmp=0;
        for(rgi j=1;j<=n;j++)
        {
            if(check(j,s))
                ans[++tmp]=j;
        }
        for(rgi j=1;j<tmp;++j)
            cout<<ans[j]<<" ";
        if(tmp>=1)cout<<ans[tmp];
        puts(" ");
    }
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...