题目链接

题意

读完题目就一个感受:这出题人tm不会说人话吗。真的感觉这个题理解题意比想出正解更难。

其实题目的意思就是,给出一些单词,给这些单词编个号,然后要求其他的单词中是这个单词后缀的词都在这个词的前面。每个单词的贡献是当前单词的标号减去他的后缀中标号最大的那个的标号。

希望我能表达明白吧233

思路

因为后缀不好考虑,所以先把字符串倒过来,就都变成了前缀

然后把这些字符串在全都挂到trie树上,每个字符串的结尾打的标记是这个字符串的标号。

删去trie树中的虚点(没有打标记的点)。就可以得到一棵新的树,然后发现,每个字符串的前缀肯定都是他的祖先。然后要求给这些节点编号,是的每个节点的祖先的编号都比这个节点的编号小。并且使得所有节点的编号与他父亲的编号的差值和最小。

用贪心的思想,先给子树大小最小的那棵子树编号。显然这样贪心是对的。

代码

/*
* @Author: wxyww
* @Date: 2018-12-17 11:02:04
* @Last Modified time: 2018-12-17 16:59:58
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<ctime>
#include<bitset>
using namespace std;
typedef long long ll;
const int N = 110000;
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
vector<int>e[N];
int trie[N * 5][30];
char s[N * 5];
int siz[N * 5],tot,bz[N * 5];
void insert(int k) {
int len = strlen(s + 1);
int now = 0;
for(int i = len;i >= 1;--i) {
if(!trie[now][s[i] - 'a']) trie[now][s[i] - 'a'] = ++tot;
now = trie[now][s[i] - 'a'];
}
bz[now] = k;
}
void dfs1(int u,int fa) {
if(bz[u]) e[fa].push_back(bz[u]);
for(int i = 0;i < 26;++i) {
if(!trie[u][i]) continue;
if(bz[u]) dfs1(trie[u][i],bz[u]);
else dfs1(trie[u][i],fa);
}
}
bool cmp(int x,int y) {
return siz[x] < siz[y];
}
void dfs2(int u) {
int k = e[u].size();
siz[u] = 1;
for(int i = 0;i < k;++i) {
int v = e[u][i];
dfs2(v);
siz[u] += siz[v];
}
sort(e[u].begin(),e[u].end(),cmp);
}
int now,bh[N];
ll ans;
void solve(int u,int fa) {
ans += now - fa;fa = now ++;
int k = e[u].size();
for(int i = 0;i < k;++i) {
int v = e[u][i];
solve(v,fa);
}
} int main() {
int n = read();
for(int i = 1;i <= n;++i) {
scanf("%s",s + 1);
insert(i);
}
dfs1(0,0);
dfs2(0);
solve(0,0);
cout<<ans;
return 0;
}

一言

书足以记名姓而已。剑一人敌,不足学,学万人敌。

[luogu3294][背单词]的更多相关文章

  1. 做中学(Learning by Doing)之背单词-扇贝网推荐

    做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...

  2. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  3. BZOJ4567[Scoi2016]背单词

    4567: [Scoi2016]背单词 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 304 Solved: 114 [Submit][Status] ...

  4. 《我爱背单词》 Alpha版 发布说明

    ——发布地址(baidu网盘) http://pan.baidu.com/s/15omtB ——简介  <我爱背单词>是一款英语单词记忆和管理辅助软件,旨在帮助广大考生在短期内攻克GRE. ...

  5. [No000057]一个人默默背单词,小心被传染哦

    不日凛冬将至,全国各地,已有多名少侠因季节变化,出现了不同程度的四肢不勤.bd不分的症状.具体表现为—— 包大人在此高能预警:不想背单词,有可能你已经被传染了. 好好的,怎么突然不想背单词了 哈佛医学 ...

  6. [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?

    由于英语对于一个程序员来说,重要性你懂得.因此我会开始逐渐在博客上加入英语的一些东西. 听说不背单词,考英语会是这种下场 在中国, 「学英语」大抵遵循着这样一条 罗蒙诺索夫质量守恒定律 因为英语学着学 ...

  7. Supermemo背单词7周年纪念

    从2007年2月1日开始,用Supermemo背单词7周年了,在2013年11月21日将单词表Reset,重新开始Review以前背过的单词,并慢慢加入听写VOA时遇到的生词.

  8. 使用Excel背单词-高效-简单

    背单词是一个很纠结的事,想必那些走在留学路上的很多人都被英语这一关卡住了,这里,笔者就聊聊,不讲背单词的方法,只提供使用vb开发的产品和使用方法,有问题欢迎讨论. 简介:使用excel背单词,有一些人 ...

  9. 基于百词斩和扇贝单词的背单词APP软件测试

    概述 背单词APP是非常受大学生青睐的手机应用,但它的发展尚未成熟,存在一些缺陷.我们决定深入地分析一组典型的背单词APP:百词斩(A产品).扇贝单词(B产品),寻找当前背单词APP中的提升空间.下面 ...

随机推荐

  1. 排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题

    目前我们在使用 Maxwell 在读线上机器的 binlog 同步我们的离线数据库. 这次错误定位上,首先线要确定问题是发生在生产者 还是队列 还是消费者.经过查看各机器上任务的运行日志,定位到了问题 ...

  2. yii2的下载安装

    1.直接使用归档文件安装yii2的高级模板: 从 yiiframework.com 下载归档文件. 下载yii2的高级模板的压缩文件, 将yii-advanced-app-2.0.12文件夹复制到项目 ...

  3. tornado.gen.coroutine-协程

    http://blog.csdn.net/seeground/article/details/49488281  

  4. epoch、 iteration和batchsize区别

    转自: https://blog.csdn.net/qq_27923041/article/details/74927398 深度学习中经常看到epoch. iteration和batchsize,下 ...

  5. vue实例相关2

    vue data中 对象/数组 不为空,即使定义为[]/{} new Vue({ el: '#main', data: { list: [], current: {}, aa:'' } }) cons ...

  6. Nginx 浏览器缓存

    L:97 一般都是 同时使用 浏览器与Nginx缓存

  7. Android View相关知识问答

    Android View相关核心知识问答 Activity Window View之间的三角关系 你真的了解View的坐标吗? 在渲染前获取 View 的宽高 5种手势工具类 浅析Android的窗口

  8. 第二十二天 logging hashlib re 模块

    今日内容 logging功能完善的日志模块 re正则表达式模块主要处理字符串匹配 查找 搜索给你一个字符串 要从中找到你需要的东西 爬虫大量使用 hashlib hash算法相关的库 算法怎么算不需要 ...

  9. P1308 统计单词数

    P1308 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请 ...

  10. POJ 2352 树状数组

    学习自:链接以及百度百科 以及:https://www.bilibili.com/video/av18735440?from=search&seid=363548948825132979 理解 ...