CF 566A Matching Names
CF 566A Matching Names
题目描述
给出n个名字和n个昵称,求一个名字和昵称的劈配方案,使得被劈配的名字和昵称的最长公共前缀长度的和最大。
1<=n<=100000
字符总数最多800000
输入格式
第一行n
后面n行名字
最后n行昵称
输出格式
第一行最大最长公共前缀长度和
后面n行每行两个整数分别为名字和昵称的编号代表劈配方案,有SPJ
这题好神仙。
本来一看匹配,费用流费用流,一看数据,萎了
考虑是匹配字符串,遂用一些字符串的算法。
要求总匹配长度最大,由贪心我们先令单次匹配较大的匹配,容易证得这样不会更差。
把字符串放到字典树上,根据种类进行编号。
然后在dfs时维护一个系统队列,每次把一个点为根的子树下面的点给统计好,再做上面的。
Code:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N=800010;
struct node
{
int ch[26];
vector <pair <int,int > > per;
}t[N];
char c[N];
int tot,n;
void add(int typ,int num)
{
int len=strlen(c);
int now=0;
for(int i=0;i<len;i++)
{
if(!t[now].ch[c[i]-'a']) t[now].ch[c[i]-'a']=++tot;
now=t[now].ch[c[i]-'a'];
}
t[now].per.push_back(make_pair(num,typ));
}
int q[2][N],l[2],r[2],ans[2][N],cnt,sum;
void dfs(int now,int dep)
{
int tl[2];
tl[0]=l[0],tl[1]=l[1];
l[0]=r[0]+1;
l[1]=r[1]+1;
for(int i=0;i<26;i++)
if(t[now].ch[i])
dfs(t[now].ch[i],dep+1);
for(int i=0;i<t[now].per.size();i++)
{
int typ=t[now].per[i].second;
q[typ][++r[typ]]=t[now].per[i].first;
}
while(l[0]<=r[0]&&l[1]<=r[1])
{
ans[0][++cnt]=q[0][r[0]--];
ans[1][cnt]=q[1][r[1]--];
sum+=dep;
}
l[0]=tl[0];
l[1]=tl[1];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",c);
add(0,i);
}
for(int i=1;i<=n;i++)
{
scanf("%s",c);
add(1,i);
}
dfs(0,0);
printf("%d\n",sum);
for(int i=1;i<=n;i++)
printf("%d %d\n",ans[0][i],ans[1][i]);
return 0;
}
2018.7.25
CF 566A Matching Names的更多相关文章
- [CF566A]Matching Names
[CF566A]Matching Names 题目大意: A组和B组各\(n(n\le10^5)\)个字符串\((\sum|S|\le8\times10^5)\),将它们两两匹配,使得每组两个字符串的 ...
- CF Fox And Names (拓扑排序)
Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- aufomaper Queryable Extensions ProjectTo
When using an ORM such as NHibernate or Entity Framework with AutoMapper's standard Mapper.Map funct ...
- MyEclipse 中各种 libraries 的含义
MyEclipse 中各种 libraries 的含义 JRE System Library,Java EE 5 Libraries,Referenced Libraries这三个都是各 ...
- 为AM335x移植Linux内核主线代码(35)使用platform中的GPIO
http://www.eefocus.com/marianna/blog/15-02/310352_46e8f.html 使用GPIO,当然可以自己编写驱动,比如之前的第34节,也可以使用Kernel ...
- 转:db2 backup 及 restore
db2 backup 及 restore 2011-06-21 18:12:20| 分类: AIX |举报 |字号 订阅 两个问题: db2=>list applications db ...
- Python 在Visual studio 中做单元测试进行TDD开发
Unit Tests Steve Dower edited this page on 14 Jul · 3 revisions Pages 38 Home Azure Remote Debugging ...
- Myeclipse中隐藏jar包
在package explorer的右上角有一个向下的小三角 点击选择Filter 在打开的对话框中 第一个选框中打上对勾 文字框中填上 *.jar 然后点击OK就行了 多个隐藏内容之间用逗号隔开 如 ...
- Supported method argument types Spring MVC
Supported method argument types The following are the supported method arguments: Request or respons ...
随机推荐
- python-前方高能-面向对象-进阶3
面向对象 你写代码的时候 什么时候用面向对象 代码量大,功能多的时候 处理比较复杂的角色之间的关系 qq 好友 陌生人 群 组 复杂的电商程序 公司/学校的人事管理/功能的系统 我的代码的清晰度更高了 ...
- 福利,一张图看懂IT售前工程师修炼之道
职场中的新人如何自我定位? 如何深刻理解IT售前这个职位? 如何从IT售前菜鸟成长为IT售前专家? 推荐这本书<IT售前工程师修炼之道> 本书精华内容 售前的重要性 售前要有逻辑能力 售前 ...
- Python基础灬异常
异常&异常处理 异常!=错误 在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的 ...
- app结合unity3D程序中遇到的问题 MapFileParser unity3d导出到IOS程序下 集成unity3dAR功能
转载自: 来自AR学院(www.arvrschool.com),原文地址为:http://www.arvrschool.com/index.php?c=post&a=modify&ti ...
- eclipse 简单操作
1.设置字体: windows --> preferences --> general --> Colors and Fonts --> Basic --> 双击 Tex ...
- presto 配置mysql.properties异常Database (catalog) must not be specified in JDBC URL for MySQL connector
在presto 0.210 以后配置mysql.properties的时候,对于jdbc-url属性配置后面要加上对应要链接的database connection-url=jdbc:mysql:// ...
- “Hello World!”团队第六周的第一次会议
今天是我们团队“Hello World!”团队第六周召开的第一次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.Todo List 六.会议照片 七.燃尽图 一.会议时间 ...
- 第五次作业psp
psp 进度条 代码累积折线图 博文累积折线图 psp饼状图 团体合作体会:经过这几天的团队,我感受良多.发现团队协作是一件非常让人兴奋的事情.团队成员们互相帮助,互相协作,让我感受最深的就是当自己为 ...
- 改进意见的答复及bug重现
各组对本组的互评链接如下 Thunder:http://www.cnblogs.com/vector121/p/7905300.html 王者荣耀交流协会:http://www.cnblogs.com ...
- Thunder团队第七周 - Scrum会议2
Scrum会议2 小组名称:Thunder 项目名称:i阅app Scrum Master:王航 工作照片: 参会成员: 王航(Master):http://www.cnblogs.com/wangh ...