题目:

班里有n个同学。老师为他们选了n个笔名。现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学。现在定义笔名和真名之间的相关度是他们之间的最长公共前缀。设笔名为a,真名为b,则他们之间的相关度为lcp(a,b)。那么我们就可以得到匹配的质量是每一个同学笔名和真名之间相关度的和。

现在要求分配笔名,使得匹配质量最大。

样例解释:

·        bill → bilbo (lcp = 3)

·        galya → galadriel (lcp = 3)

·        gennady → gendalf (lcp = 3)

·        toshik → torin (lcp = 2)

·        boris → smaug (lcp = 0)

Input

单组测试数据。
第一行有一个整数n (1≤n≤100000),表示班级中同学的数目。
接下来n行,表示每一个同学的真名,每一个名字是非空串,且由小写字母组成。
名字可能重复。
最后n行是老师已经安排好的笔名。每一个笔名是一个非空串,且由小写字母组成。
笔名可能重复。
输入的字符总数目不超过 800000。

Output

输出最大的匹配质量。

Input示例

样例输入1
5
gennady
galya
boris
bill
toshik
bilbo
torin
gendalf
smaug
galadriel

Output示例

样例输出1
11

题解:

这道题一来没有注意到一一对应关系直接上trie树暴力匹配挂成0······

下次一定要仔细读题了···其实保证两次笔名的一一对应关系的方法是很简单的··具体看代码

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
#include<ctime>
using namespace std;
const int N=;
int n,son[N][],len,tot,a[N],b[N];
char s[N];
inline void build(int a[])
{
int po=;
for(int i=;i<=len;i++)
{
if(!son[po][s[i]-'a']) son[po][s[i]-'a']=++tot;
po=son[po][s[i]-'a'];a[po]++;
}
}
int main()
{
//freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",s+);len=strlen(s+);build(a);
}
for(int i=;i<=n;i++)
{
scanf("%s",s+);len=strlen(s+);build(b);
}
int ans=;
for(int i=;i<=tot;i++) ans+=min(a[i],b[i]);
cout<<ans<<endl;
return ;
}

最新文章

  1. IDDD 实现领域驱动设计-一个简单的 CQRS 示例
  2. MySQL 一些查询语句及技巧
  3. Mysql数据库的通用安装方法
  4. C#日常知识
  5. POJ 1523 SPF tarjan求割点
  6. MVVM解决方案的一般结构
  7. windows下安装CI框架
  8. 【HDOJ】1316 How Many Fibs?
  9. HDU_2042——递归反推
  10. Sprite Kit编程指南(1)-深入Sprite Kit
  11. 普通图片转ascii码字符图
  12. Android的内存分配与回收
  13. LeetCode724. 寻找数组的中心索引
  14. markdown小知识总结
  15. subline 建立服务器
  16. VB.NET中的DLL编写和调用的最简单示例
  17. Docker端口映射(六)
  18. 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理
  19. Latex中如何设置字体颜色(3种方式)
  20. 一个很棒的Flutter学习资源列表

热门文章

  1. 香港城大:首创3D打印磁控微型机器人技术推动人体送药研究发展
  2. java中Integer和int的区别
  3. spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明
  4. thinkphp的使用——隐藏index.php
  5. ll1文法
  6. 机器学习十大常用算法(CITE 不会停的蜗牛 ) interesting
  7. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 FSM Coding Goals
  8. MySQL中 IFNULL、NULLIF和ISNULL函数的用法
  9. Lecture 1
  10. 树莓派开发板入门学习笔记1:[转]资料收集及树莓派系统在Ubuntu安装