51nod 1526 分配笔名(Trie树+贪心)
建出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树+贪心)相关推荐
- 51nod 1526 分配笔名(字典树)
1526 分配笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 班里有n个同学.老师为他们选了n个笔名.现在 ...
- 51Nod 1526 分配 笔名
1526 分配 笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 班里有n个同学.老师为他们选了n个笔名 ...
- 51nod 1526 分配笔名
题意 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名为 ...
- 51nod1526 分配笔名 trie+贪心
Description 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长 ...
- 51NOD P1526 分配笔名
ORZ ZYY 首先建立trie树,是名字打标机+1,是笔名的话打标机-1 然后贪心爆搜,如果当前和儿子标机不同就加上,记得标机要上传 然后最后一组数据特判掉吧 #include<iostrea ...
- BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- 刷题总结——分配笔名(51nod1526 trie树)
题目: 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名 ...
- Trie——51nod1526 分配笔名
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1526 这题主线思路肯定是Trie对吧 定义笔名和真名之间的相关度是他们 ...
- 【bzoj4567】[Scoi2016]背单词 贪心+trie树
我个傻逼,这么水的题还调了那么久. 把所有的串都反过来,建trie树,很明显,不同子树间是不影响的. 一定是先选择父亲节点再选子节点,同一个节点先选子树大小最小的儿子即可. 一开始想错了,以为可以直接 ...
最新文章
- 《设计模式系列》---工厂方法
- html放缩都让内容处于正中间
- 在Ubuntu上以精灵进程daemon process的方式启动一个命令
- HDU6956-Pass!(2021杭电多校一)(BSGS)
- SAP创建新的项目类型
- DB2 错误信息 SQLCODE SQLSTATE说明
- win10禁用驱动程序强制签名_Win10系统永久禁用驱动数字签名的方法是什么?
- 【应用多元统计分析】CH5 判别分析3——贝叶斯判别
- boss网人脸识别认证_在手机上怎样进行社保人脸识别认证
- Windows中 配置DHCP服务器
- 利用mobi 和 epub 电子书文件建立自己的书库
- 1527.患某种疾病的患者
- Chapter8.金融时间序列
- MSSQL Server 2008中的MERGE(不仅仅是合并)
- 广州市白云区2021-2022学年九年级第一学期期末考试英语试题
- vfp 连接mysql数据库_VFP与SQL远程异构数据库_mysql
- 博世(BOSCH) ECU BootLoader设计思路
- 腾讯QQ2007II Beta2传美版v2.2[2007年11月26日更新]
- 4款安装后就不打算卸载的“神器”APP,每天浪费时间在这上面也觉得值
- ubuntu20.04下CLion2020.1.3安装配置ROS过程说明