51NOD P1526 分配笔名
ORZ ZYY
首先建立trie树,是名字打标机+1,是笔名的话打标机-1
然后贪心爆搜,如果当前和儿子标机不同就加上,记得标机要上传
然后最后一组数据特判掉吧
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
char s[800003];
int c[800003][27];
int sz,n,len;
int dep[800003];
int tag[800003];
long long ans,cnt;
void dfs(int x){if(dep[x]>=500000){cout<<1;exit(0);}for(int i=0;i<26;i++){if(c[x][i]){dfs(c[x][i]);if(tag[x]>0&&tag[c[x][i]]<0){ans+=min(tag[x],-tag[c[x][i]])*dep[x];}else{if(tag[x]<0&&tag[c[x][i]]>0){ans+=min(-tag[x],tag[c[x][i]])*dep[x];}}tag[x]+=tag[c[x][i]];}}
}
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%s",s+1);len=strlen(s+1);int x=0;for(int i=1;i<=len;i++){if(!c[x][s[i]-'a']){c[x][s[i]-'a']=++cnt;}x=c[x][s[i]-'a'];dep[x]=i;}tag[x]++;}for(int i=1;i<=n;i++){scanf("%s",s+1);len=strlen(s+1);int x=0;for(int i=1;i<=len;i++){if(!c[x][s[i]-'a']){c[x][s[i]-'a']=++cnt;}x=c[x][s[i]-'a'];dep[x]=i;}if(tag[x]>0){ans+=dep[x];}tag[x]--;}dfs(0);cout<<ans<<endl; return 0;
}
/*
in:
5
gennady
galya
boris
bill
toshik
bilbo
torin
gendalf
smaug
galadrielout:
11
*/
51NOD P1526 分配笔名相关推荐
- 51nod 1526 分配笔名(字典树)
1526 分配笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 班里有n个同学.老师为他们选了n个笔名.现在 ...
- 51nod 1526 分配笔名
题意 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名为 ...
- 51Nod 1526 分配 笔名
1526 分配 笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 班里有n个同学.老师为他们选了n个笔名 ...
- 51nod 1526 分配笔名(Trie树+贪心)
建出Trie树然后求出一个点子树中有多少笔名和真名.然后贪心匹配即可. #include<iostream> #include<cstring> #include<cst ...
- Trie——51nod1526 分配笔名
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1526 这题主线思路肯定是Trie对吧 定义笔名和真名之间的相关度是他们 ...
- 51nod1526 分配笔名 trie+贪心
Description 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长 ...
- 刷题总结——分配笔名(51nod1526 trie树)
题目: 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名 ...
- trie-51nod1526 分配笔名
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1526 狗题: 卡我内存6mb: 所以我只有95分: 好像用指针,用结构体 ...
- 51nod-1526: 分配笔名
[传送门:51nod-1526] 简要题意: 给出n个真名和笔名,都是字符串 要求n个真名和笔名一一匹配,一个真名和一个笔名所带来的价值是这两个字符串的最长公共前缀 题解: 直接将真名和笔名插进字典树 ...
最新文章
- 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...
- Sophos将AI技术用于预防恶意IP的安全解决方案中
- druid 多数据源_Druid连接池的使用以及注意事项
- java中mongodb中dao通用_Spring配置MongoDB及 构建通用Dao
- Bytom的链式交易和花费未确认的交易
- 【LeetCode 剑指offer刷题】字符串题12:Valid Palindrome(回文词系列)
- Linux驱动程序中的并发控制
- HTML5 — 知识总结篇《VIII》【媒体元素】
- DELPHI2007 安装ACTIVEX插件的方法
- 代码高亮与美化的工具
- H264三种码率控制方法(CBR, VBR, CVBR)
- 如何制作六一儿童节答题测试H5页面?
- (57)Linux驱动开发之三Linux字符设备驱动
- About Redistribute
- 美国大学计算机科学gpa,美国大学gpa计算
- 工业机器人(四)——传感元件制作
- Redis expire
- Google Play开发者账号注册
- Android WifiDisplay分析二:Wifi display连接过程
- java微信实现窗口自动输入(微信骚扰机)