UVA-10887
本题题意就是给你AB两个字符串集,问你以A中字符串作为前缀,B中字符串作为后缀,可以得到多少个不同的字符串,就对每个拼接后的字符串放进字典树,统计单词个数就可以了
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn = 2e6+5;
int root,cnt;
int ans;
int tree[maxn][26];
int end_[maxn];
int newnode()
{end_[cnt]=0;for(int i=0;i<26;i++)tree[cnt][i]=-1;return cnt++;
}
void init()
{ans=0;cnt=0;root=newnode();
}
void insert_(string str)
{int tmp=root;int len=str.size();for(int i=0;i<len;i++){int id=str[i]-'a';if(tree[tmp][id]==-1){tree[tmp][id]=newnode();}tmp=tree[tmp][id];}if(end_[tmp]==0){end_[tmp]=1;ans++;}return ;
}
string str1[1505];
string str2[1505];
string str3;
char tmp1[15];
char tmp2[15];
int main()
{int n,m,t;int cnt=1;scanf("%d",&t);while(t--){init();scanf("%d%d",&n,&m);getchar();for(int i=0;i<n;i++){gets(tmp1);//读入可能有空行,用getsstr1[i]=tmp1;}for(int i=0;i<m;i++){gets(tmp2);str2[i]=tmp2;}for(int i=0;i<n;i++){for(int j=0;j<m;j++){str3=str1[i]+str2[j];//拼接insert_(str3);}}printf("Case %d: %d\n",cnt++,ans);}return 0;
}