bzoj4567 背单词
Description
Input
Output
Lweb 吃的最少泡椒数
Sample Input
a
ba
Sample Output
给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x):
1.排在s后面的字符串有s的后缀,则代价为n^2;
2.排在s前面的字符串有s的后缀,且没有排在s后面的s的后缀,则代价为x-y(y为最后一个与s不相等的后缀的位置);
3.s没有后缀,则代价为x。
根据后缀的条件,我们可以判断出这道题可以用trie树。当然我们需要反向存字符串。
然后我们可以知道,对于一个字符串,只有它的第一个点(翻转之前)是对我们有用的,比如:ABCD,BCD我们只用记录A有一条向B的边。
我们先正常建树,然后标记所有末尾点,如果这个点的父亲是它的前缀,那么就连一条父亲到他的边。
对于取字符策略,考虑贪心。对于一个点,我们优先选择那个最小的子树,从小到大,依次枚举。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define REP(i,k,n) for(long long i=k;i<=n;i++)
#define in(a) a=read()
#define MAXN 510010
using namespace std;
inline long long read(){
long long x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
long long n;
long long cnt=;
long long f[MAXN];
long long total=,head[MAXN],nxt[MAXN],to[MAXN];
long long tree[MAXN][],isend[MAXN];
long long size[MAXN];
long long dfn[MAXN],ind=,ans=;
long long top=;
struct node{
long long si,in;
}arr[MAXN];
inline void adl(long long a,long long b){
total++;
// cout<<total<<" "<<a<<" "<<b<<endl;
to[total]=b;
nxt[total]=head[a];
head[a]=total;
return ;
}
inline void insert(char *s){
long long u=;
for(long long i=strlen(s)-;i>=;i--){
if(!tree[u][s[i]-'a']) tree[u][s[i]-'a']=++cnt;
u=tree[u][s[i]-'a'];
}
//cout<<u<<endl;
isend[u]=;
return ;
}
inline void build(long long u,long long f){
if(isend[u]){
adl(f,u);
f=u;
}
REP(i,,)
if(tree[u][i])
build(tree[u][i],f);
return ;
}
inline void getsize(long long u){
size[u]=;
for(long long e=head[u];e;e=nxt[e]){
getsize(to[e]);
size[u]+=size[to[e]];
}
return ;
}
inline bool cmp(node a,node b){
return a.si<b.si;
}
inline void getans(long long u){
dfn[u]=++ind;
long long m=top+;
for(long long e=head[u];e;e=nxt[e]){
arr[++top].in=to[e];
arr[top].si=size[to[e]];
}
if(top<m) return ;
sort(arr+m,arr+top+,cmp);
REP(i,m,top){
getans(arr[i].in);
ans+=dfn[arr[i].in]-dfn[u];
//cout<<u<<" "<<arr[i].in<<" "<<ans<<endl;
}
top=m-;
return ;
}
int main(){
in(n);
char c[];
REP(i,,n){
scanf("%s",c);
insert(c);
}
build(,);
getsize();
getans();
cout<<ans;
}
/*
4
da
dcba
ba
cba
*/
bzoj4567 背单词的更多相关文章
- 【BZOJ4567】[Scoi2016]背单词 Trie树+贪心
[BZOJ4567][Scoi2016]背单词 Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他 ...
- 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时遇到的生词.
随机推荐
- ASP.NET EF(LINQ/Lambda查询)
EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动 ...
- 从ISE14.7使用Micoblaze点亮led灯
1. ISE => new program => new source => embedded processor 2. XPS 2.1 create new xps program ...
- hdu 3729 I'm Telling the Truth(二分匹配_ 匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729 I'm Telling the Truth Time Limit: 2000/1000 MS ( ...
- flask插件系列之SQLAlchemy基础使用
sqlalchemy是一个操作关系型数据库的ORM工具.下面研究一下单独使用和其在flask框架中的使用方法. 直接使用sqlalchemy操作数据库 安装sqlalchemy pip install ...
- kernel随机生成MAC地址的接口
/** * eth_random_addr - Generate software assigned random Ethernet address * @addr: Pointer to a si ...
- 运维小知识之nginx---nginx配置Jboss集群负载均衡
codyl 2016-01-26 00:53:00 浏览385 评论0 负载均衡 转自 运维小知识之nginx---nginx配置Jboss集群负载均衡-博客-云栖社区-阿里云https://yq ...
- java中8种数据类型和默认值所占字节数
java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...
- 关于Hazard Pointers的话题
关于Hazard Pointers的话题, 起源于这个文章: 实现无锁的栈与队列(4) http://www.cnblogs.com/catch/p/3176636.html 其实他的系列文章(3)之 ...
- ssh修改端口号并进行远程访问
ssh的访问如果都利用22端口,则会容易被攻击,修改一个端口号可增强一定的安全性 1. 修改配置文件sshd_config里端口号 [root@test ~]# vi /etc/ssh/sshd_co ...
- 美化的select下拉框
ie7浏览器以后的下拉框,给他加上边框样式,是没用的.要是想做出样式好看的下拉框需要用js或者jquery来模拟实现. 代码如下: <div class="r"> &l ...