题目:

班里有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=800005;
int n,son[N][26],len,tot,a[N],b[N];
char s[N];
inline void build(int a[])
{int po=0;for(int i=1;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=1;i<=n;i++){scanf("%s",s+1);len=strlen(s+1);build(a);}for(int i=1;i<=n;i++){scanf("%s",s+1);len=strlen(s+1);build(b);}int ans=0;for(int i=1;i<=tot;i++)  ans+=min(a[i],b[i]);cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/AseanA/p/7718604.html

刷题总结——分配笔名(51nod1526 trie树)相关推荐

  1. 51nod 1526 分配笔名(Trie树+贪心)

    建出Trie树然后求出一个点子树中有多少笔名和真名.然后贪心匹配即可. #include<iostream> #include<cstring> #include<cst ...

  2. 【刷题】572. 另一棵树的子树

    572. 另一棵树的子树 一.题目描述 二.示例 三.实现 572. 另一棵树的子树 一.题目描述 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相 ...

  3. C#LeetCode刷题-字典树

    字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树) 48.6% 中等 211 添加与搜索单词 - 数据结构设计 39.9% 中等 212 单词搜索 II 27.9% 困难 33 ...

  4. ​LeetCode刷题实战216:组合总和 III

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. 自然语言--Trie树详解及其应用

    链接:http://blog.csdn.net/hackbuteer1/article/details/7964147 参考链接:https://segmentfault.com/a/11900000 ...

  6. 数据结构与算法一年刷题特训营

    [福利]C++语言基础       1.1 头文件.输入输出.格式.基本运算.mp4       2.1 if.swith语句.逻辑运算.mp4       3.1 for . break . con ...

  7. POJ3630——简单Trie树

    这个题的意思是说,给出一些字符串,判断是否有字符串是另一个字符串的前缀,当然可以用排序水过,不过这个题拿来练习一下Trie树不错. 这个题在poj的discuss上好多人说必须要静态建树,估计都是用了 ...

  8. ​LeetCode刷题实战276:栅栏涂色

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战314:二叉树的竖直遍历

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. 香港中文大学(深圳)吴保元教授课题组招收全奖PhD、实习/访问学生
  2. python空行拼接字符串_python基础---文本和字符串操作
  3. MySQL中的组函数(聚合函数)
  4. python中global 和 nonlocal 的作用域
  5. 按单词逆序句子(含标点)
  6. iOS开发拓展篇—音频处理(音乐播放器6)
  7. 嵌入式面试中常见的问答题(线程进程、TCP等)
  8. 获取另一个驱动的设备结构体_字符设备驱动的另一种写法
  9. 私人心情录小程序源码
  10. 广东中国科学院计算机网络信息中心,中国科学院
  11. python获取调用函数的注释,如何使用函数注释验证函数调用类型
  12. ubuntu常用软件安装_机器学习_第一部分纯命令版本
  13. getgrgid()函数
  14. Javascript实现类似C#类的封装
  15. 静态tableview组背景色的更改及自定义cell的两种方式
  16. Python中字符串切片操作
  17. 大数据平台有什么功能作用
  18. 线段中点到另一直线距离最短_圆弧与线段的最短距离
  19. ubuntu16.04安装google中文输入法
  20. Idea中jrebel激活码

热门文章

  1. 树莓派zero,连接手机USB共享网络
  2. 计算机拆硬盘后黑屏,就这水平还说懂电脑,客户到店退货:装上硬盘电脑开机就黑屏了!...
  3. 2022-2027年中国隔音毡行业市场深度分析及投资战略规划报告
  4. ios 有java虚拟机_最新iPhone 12配置盘点,安卓用户笑出声……
  5. SSL证书和网站证书一样吗?
  6. 泛泰A800S移植A850天气软件debug流程
  7. Matlab自制Colorbar(一)
  8. rqn 137 找试场(模拟)
  9. 荣耀x1智慧屏harmonyos,预算3000元买65寸电视,荣耀智慧屏X1、红米电视和海信电视,咋选...
  10. 微信小程序跳转公众号推文