建出Trie树然后求出一个点子树中有多少笔名和真名。然后贪心匹配即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=810000;
int ans,n;
char s[N];
struct trie{int trans[N][27],tot,size[N][2],len[N];void ins(char *s,int k){int L=strlen(s+1);int now=0,lon=0;for(int i=1;i<=L;i++){if(trans[now][s[i]-'a'+1]==0)trans[now][s[i]-'a'+1]=++tot,len[tot]=len[now]+1;now=trans[now][s[i]-'a'+1];}size[now][k]++;}void dfs(int u){for(int i=1;i<=26;i++){int v=trans[u][i];if(v==0)continue;dfs(v);size[u][0]+=size[v][0];size[u][1]+=size[v][1];}int tmp=min(size[u][0],size[u][1]);ans+=tmp*len[u];size[u][0]-=tmp;size[u][1]-=tmp;}
}trie;
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s+1);trie.ins(s,0);}for(int i=1;i<=n;i++){scanf("%s",s+1);trie.ins(s,1);}trie.dfs(0);printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/Xu-daxia/p/10235646.html

51nod 1526 分配笔名(Trie树+贪心)相关推荐

  1. 51nod 1526 分配笔名(字典树)

    1526 分配笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题  收藏  关注 班里有n个同学.老师为他们选了n个笔名.现在 ...

  2. 51Nod 1526 分配 笔名

    1526 分配 笔名 题目来源:  CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320  难度:7级算法题  收藏  关注 班里有n个同学.老师为他们选了n个笔名 ...

  3. 51nod 1526 分配笔名

    题意 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名为 ...

  4. 51nod1526 分配笔名 trie+贪心

    Description 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长 ...

  5. 51NOD P1526 分配笔名

    ORZ ZYY 首先建立trie树,是名字打标机+1,是笔名的话打标机-1 然后贪心爆搜,如果当前和儿子标机不同就加上,记得标机要上传 然后最后一组数据特判掉吧 #include<iostrea ...

  6. BZOJ 3261 最大异或和 可持久化Trie树

    题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...

  7. 刷题总结——分配笔名(51nod1526 trie树)

    题目: 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名 ...

  8. Trie——51nod1526 分配笔名

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1526 这题主线思路肯定是Trie对吧 定义笔名和真名之间的相关度是他们 ...

  9. 【bzoj4567】[Scoi2016]背单词 贪心+trie树

    我个傻逼,这么水的题还调了那么久. 把所有的串都反过来,建trie树,很明显,不同子树间是不影响的. 一定是先选择父亲节点再选子节点,同一个节点先选子树大小最小的儿子即可. 一开始想错了,以为可以直接 ...

最新文章

  1. 《设计模式系列》---工厂方法
  2. html放缩都让内容处于正中间
  3. 在Ubuntu上以精灵进程daemon process的方式启动一个命令
  4. HDU6956-Pass!(2021杭电多校一)(BSGS)
  5. SAP创建新的项目类型
  6. DB2 错误信息 SQLCODE SQLSTATE说明
  7. win10禁用驱动程序强制签名_Win10系统永久禁用驱动数字签名的方法是什么?
  8. 【应用多元统计分析】CH5 判别分析3——贝叶斯判别
  9. boss网人脸识别认证_在手机上怎样进行社保人脸识别认证
  10. Windows中 配置DHCP服务器
  11. 利用mobi 和 epub 电子书文件建立自己的书库
  12. 1527.患某种疾病的患者
  13. Chapter8.金融时间序列
  14. MSSQL Server 2008中的MERGE(不仅仅是合并)
  15. 广州市白云区2021-2022学年九年级第一学期期末考试英语试题
  16. vfp 连接mysql数据库_VFP与SQL远程异构数据库_mysql
  17. 博世(BOSCH) ECU BootLoader设计思路
  18. 腾讯QQ2007II Beta2传美版v2.2[2007年11月26日更新]
  19. 4款安装后就不打算卸载的“神器”APP,每天浪费时间在这上面也觉得值
  20. ubuntu20.04下CLion2020.1.3安装配置ROS过程说明

热门文章

  1. 单帧图像超分辨率与深度学习
  2. Eventually Consistent(最终一致性)
  3. JS实现网页中绘制10x10表格,并在其中区分1-100素数合数。
  4. CFileDialog简单使用
  5. 2020寻找你的朋友圈认证,限时领取【2020 认证勋章】,千万不要错过!!
  6. 相机标定、双目相机标定(原理)、三维重建效果展示
  7. 别被软文洗脑,回长沙后端开发告诉你真实的长沙
  8. 如何让你的简历脱颖而出
  9. VB FileSystemObject对象 详解
  10. C语言实现strncpy