背单词(bzoj 4567)
Description
Input
Output
Lweb 吃的最少泡椒数
Sample Input
a
ba
Sample Output
/*
贪心+字典树
首先第一个条件肯定不是最优的,所以我们得让s的后缀都在s前面,我们可以把字符串翻转建trie,删除所有不是字符串尾部的节点,然后就是找一种编号方式。
比较显然的是我们可以通过按照子树大小排序然后贪心dfs序。
*/
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#define N 100010
#define M 500010
using namespace std;
int n,tot=,a[M][],id[M],fa[N],head[N],sz[N],f[N],cnt;
char s[M];
struct node{int v,pre;}e[N];
vector<pair<int,int> > v[N];
void add(int x,int y){
e[++cnt].v=y;e[cnt].pre=head[x];head[x]=cnt;
fa[y]=x;
}
void dfs(int x,int f){
if(id[x])add(f,id[x]),f=id[x];
for(int i=;i<=;i++) if(a[x][i])dfs(a[x][i],f);
}
void getsz(int x){
sz[x]=;
for(int i=head[x];i;i=e[i].pre){
getsz(e[i].v);
sz[x]+=sz[e[i].v];
v[x].push_back(make_pair(sz[e[i].v],e[i].v));
}
sort(v[x].begin(),v[x].end());
}
void getf(int x){
if(x)f[x]=++tot;
for(int i=;i<v[x].size();i++)getf(v[x][i].second);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",s+);int len=strlen(s+),now=;
for(int j=len;j;j--){
int x=s[j]-'a';
if(!a[now][x])a[now][x]=++tot;
now=a[now][x];
}
id[now]=i;
}
dfs(,);
getsz();
tot=;
getf();
long long ans=;
for(int i=;i<=tot;i++)ans+=(long long)f[i]-f[fa[i]];
cout<<ans;
return ;
}
背单词(bzoj 4567)的更多相关文章
- 4567: [Scoi2016]背单词
4567: [Scoi2016]背单词 https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题意: 题意看了好久,最后在其他人的博客里看懂了的. ...
- BZOJ4567[Scoi2016]背单词
4567: [Scoi2016]背单词 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 304 Solved: 114 [Submit][Status] ...
- 【bzoj4567】[Scoi2016]背单词
4567: [Scoi2016]背单词 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1123 Solved: 476[Submit][Status][ ...
- 做中学(Learning by Doing)之背单词-扇贝网推荐
做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- 《我爱背单词》 Alpha版 发布说明
——发布地址(baidu网盘) http://pan.baidu.com/s/15omtB ——简介 <我爱背单词>是一款英语单词记忆和管理辅助软件,旨在帮助广大考生在短期内攻克GRE. ...
- [No000057]一个人默默背单词,小心被传染哦
不日凛冬将至,全国各地,已有多名少侠因季节变化,出现了不同程度的四肢不勤.bd不分的症状.具体表现为—— 包大人在此高能预警:不想背单词,有可能你已经被传染了. 好好的,怎么突然不想背单词了 哈佛医学 ...
- [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
由于英语对于一个程序员来说,重要性你懂得.因此我会开始逐渐在博客上加入英语的一些东西. 听说不背单词,考英语会是这种下场 在中国, 「学英语」大抵遵循着这样一条 罗蒙诺索夫质量守恒定律 因为英语学着学 ...
- Supermemo背单词7周年纪念
从2007年2月1日开始,用Supermemo背单词7周年了,在2013年11月21日将单词表Reset,重新开始Review以前背过的单词,并慢慢加入听写VOA时遇到的生词.
随机推荐
- Invalid bound statement (not found): com.ros.dao.LogMapper.insert
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ros.dao.LogMapp ...
- ABC3D创客项目:国旗
国旗是一个国家的象征,也是一个民族的骄傲,国旗带给人们的不仅是荣耀,更多的是爱国的情结.看一场天安门的升旗仪式一度成为广大游客去到北京的必有项目,看国旗仪仗队将五星红旗与太阳同时升起,象征着我国充满活 ...
- go语音实战读后感——一
1.第一个go程序: package main import ( "fmt" ) func main() { fmt.Println("Hello go") } ...
- vue计算属性无法监听到数组内部变化
计算属性可以帮助我们简化代码,做到实时更新,不用再自己添加function去修改data. 首先看一下计算属性的基本写法(摘自官网) var vm = new Vue({ el: '#demo', d ...
- k8s master init and add node
目录 一. add google apt-key 二. k8s master init 三. k8s node add to master cluster(use this command when ...
- (转发)IOS高级开发~Runtime(一)
IOS高级开发-Runtime(一) IOS高级开发-Runtime(二) IOS高级开发-Runtime(三) IOS高级开发-Runtime(四) 一些公用类: @interface Custom ...
- str.format输出乱码
如该示例,str.Format(L"相似度:%f\t视频名称:%s\t起始位置:%d\r\n",tmp[0].dblSimilarity,tmp[0].szFileName,tmp ...
- 【Java_多线程并发编程】基础篇——线程状态扭转函数
1. wait() sleep() yield() join()用法与区别 本文提到的当前线程是指:当前时刻,获得CPU资源正在执行的线程. 1.1 wait()方法 wait()方法定义在Objec ...
- (48)zabbix报警媒介:自定义脚本Custom alertscripts
自定义脚本媒介.zabbix会将信息传递给脚本,接下来你在脚本里面随意处理,一共会传递三个参数,按顺序接受也就是$1,$2,$3了,为了方便记忆,一般分别给他们赋值到To\Subject\body 配 ...
- GIMP中的新建Layer与更改Layer大小
这边可以直接New Layer,新建一个Layer,还可以New from Visible,第二种是将当前的状态下图像复制出来. 改变Layer的大小,一般的方法两种: Crop to Selecti ...