UVa10887 Concatenation of Languages(Trie)

 

Sample Input
2
3 2
cat
dog
mouse
rat
bat
1 1
abc
cab

Sample Output
Case 1: 6
Case 2: 1

有 n 个 A 串,m 个 B 串,问可以组成多少种 AB 串 

将所有的组合放入字典树中即可,话说为什么会有空串啊喂 

const int N=2e6+5;

    int n,m;
    int i,j,k;
    int t[N][26],tot=0;
    int vis[N];
    char ch[15];
    string str[1500+5][2];
    int ans;

int idx(int x){ return x-'a'; }

void insert(string s)
{
    int rt=0;
    for(int i=0;s[i];i++){
        int x=idx(s[i]);
        if(!t[rt][x]) t[rt][x]=++tot;
        rt=t[rt][x];
    }
    if(!vis[rt]) vis[rt]=1,ans++;
}

void clear()
{
    for(int i=0;i<=tot;i++){
        vis[i]=0;
        for(int j=0;j<26;j++) t[i][j]=0;
    }
    ans=tot=0;
}

int main()
{
    int num=0;
	rush(){
        sdd(n,m);
        getchar();
        for(int i=1;i<=n;i++) gets(ch),str[i][0]=ch;
        for(int i=1;i<=m;i++) gets(ch),str[i][1]=ch;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                string s=str[i][0]+str[j][1];
                insert(s);
            }
        }
        printf("Case %d: %d\n",++num,ans);
        clear();
    }
    PAUSE;
}

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页