[Educational Round 5][Codeforces 616F. Expensive Strings]

这题调得我心疲力竭...Educational Round 5就过一段时间再发了_(:з」∠)_

先后找了三份AC代码对拍,结果有两份都会在某些数据上出点问题...这场的数据有点水啊_(:з」∠)_【然而卡掉本弱还是轻轻松松的】

题目链接:616F - Expensive Strings

题目大意:给出\(n\)个字符串\(t_i\)以及\(n\)个数\(c_i\),定义\(p_{s,i}\)为字符串\(s\)在\(t_i\)中出现的次数,\(f(s)=\sum_{i=1}^{n}c_i\cdot p_{s,i}\cdot |s|\),求\(f(s)\)的最大值

题解:考虑将\(n\)个字符串用互不相同的字符串连接起来,并求出新串的后缀数组。对于一段连续且合法(对任意i,有sa[i]对应的字符不为连接符)的区间\([l,r]\),其对应的答案就为\(min\left \{ height_i \right \}\cdot \sum c_j\),\(j\)为sa[i]所属原字符串的编号,对应所取的字符串就是这连续几个后缀的最长公共子串。因此若考虑暴力枚举所有的合法区间,会有下面的代码

for(int l=1;l<=len_sum;l++)if(s[sa[l]-1]>N)for(int r=l;r<=len_sum;r++)if(s[sa[r]-1]<N)break;else{LL k=0;int mi=N;for(int i=l+1;i<=r;i++)mi=min(mi,height[i]);if(mi==0)break;if(mi==N){mi=0;for(int i=sa[l]-1;s[i]>N;i++)mi++;}for(int i=l;i<=r;i++)k+=1ll*mi*c[belong[sa[i]-1]];ans=max(ans,k);}
暴力

   但是这样是显然会TLE的,所以需要进一步优化

   考虑每一个height[i]的影响范围,即在该范围内,所有包含i的区间都以height[i]为最小值,此时原式的式子就为\(height_i\cdot \sum_{i=l}^{r}c_j\),这里\(l\),\(r\)表示的就是height[i]的影响范围,\(j\)依然为sa[i]所属原字符串的编号。预处理每个height[i]的影响范围以及\(c_j\)的前缀和就好了

#include<bits/stdc++.h>
using namespace std;
#define N 600001
#define LL long long
int wa[N+1001],wb[N+1001],wv[N+1001],Ws[N+1001];
int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];}
void da(const int r[],int sa[],int n,int m)
{int i,j,p,*x=wa,*y=wb,*t; for(i=0; i<m; i++) Ws[i]=0;for(i=0; i<n; i++) Ws[x[i]=r[i]]++;for(i=1; i<m; i++) Ws[i]+=Ws[i-1];for(i=n-1; i>=0; i--) sa[--Ws[x[i]]]=i;for(j=1,p=1; p<n; j*=2,m=p){for(p=0,i=n-j; i<n; i++) y[p++]=i; for(i=0; i<n; i++) if(sa[i]>=j) y[p++]=sa[i]-j;for(i=0; i<n; i++) wv[i]=x[y[i]];for(i=0; i<m; i++) Ws[i]=0;for(i=0; i<n; i++) Ws[wv[i]]++;for(i=1; i<m; i++) Ws[i]+=Ws[i-1];for(i=n-1; i>=0; i--) sa[--Ws[wv[i]]]=y[i];for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1; i<n; i++)x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;}return;
}
int sa[N],Rank[N],height[N];
void calheight(const int *r,int *sa,int n)
{int i,j,k=0;for(i=1; i<=n; i++) Rank[sa[i]]=i;for(i=0; i<n; height[Rank[i++]]=k)for(k?k--:0,j=sa[Rank[i]-1]; r[i+k]==r[j+k]; k++);for(int i=n;i>=1;--i) ++sa[i],Rank[i]=Rank[i-1];
}
char str[N];
LL ans,sum[N];
int n,c[N],s[N],leng[N],belong[N],_l[N],_r[N],len_sum;
void rua(int L,int R)
{LL res=0,x,le;for(int i=L;i<=R;i++){x=belong[sa[i]-1];le=leng[x]-sa[i]+1;if((i==R || height[i+1]<le) && (i==L || height[i]<le))res=max(res,1ll*le*c[x]);}for(int i=L;i<=R;i++)res=max(res,1ll*height[i]*(sum[min(R,_r[i])]-sum[max(L,_l[i]-1)-1]));ans=max(ans,res);
}
int main()
{scanf("%d",&n);scanf("%s",str);int len=strlen(str);for(int i=0;i<len;i++)belong[len_sum]=1,s[len_sum++]=str[i]+N;leng[1]=len_sum;for(int i=2;i<=n;i++){s[len_sum++]=i;scanf("%s",str);len=strlen(str);for(int j=0;j<len;j++)belong[len_sum]=i,s[len_sum++]=str[j]+N;leng[i]=len_sum;}da(s,sa,len_sum+1,N+1000);calheight(s,sa,len_sum);for(int i=1;i<=n;i++)scanf("%d",&c[i]);for(int i=1;i<=len_sum;i++)sum[i]=sum[i-1]+c[belong[sa[i]-1]];_l[1]=1,_r[len_sum]=len_sum;for(int i=2;i<=len_sum;i++){int _=i;while(_>1 && height[i]<=height[_-1])_=_l[_-1];_l[i]=_;}for(int i=len_sum-1;i>=1;i--){int _=i;while(_<len_sum && height[i]<=height[_+1])_=_r[_+1];_r[i]=_;}for(int l=1;l<=len_sum;l++)if(s[sa[l]-1]>N){int r=l;while(r<=len_sum && s[sa[r]-1]>N)r++;rua(l,r-1);l=r;}printf("%I64d\n",ans);
}
View Code

 

转载于:https://www.cnblogs.com/DeaphetS/p/9665970.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周鸿祎回顾IPO一周年:保持创业心态 看好无线

奇虎360董事长兼CEO周鸿祎 3月19日晚间消息&#xff0c;在奇虎360上市接近一周年之际&#xff0c;奇虎360董事长兼CEO周鸿祎与媒体及个人投资者进行沟通&#xff0c;他表示这一年压力比以前更大&#xff0c;因为在上市光环下依然需要保持创业心态&#xff0c;同时他强调无线和…

创业必经之路——Paul Graham创业曲线

导读&#xff1a;国外媒体avc.com近日发表一篇文章《The Startup Curve》&#xff0c;文中谈到创业者都处于Paul Graham创业曲线中各个阶段&#xff0c;不要一味的畏惧失败&#xff0c;要多倾听客户反馈并从中寻找制胜的信息。总而言之&#xff0c;不畏艰难即可成功。以下为文章…

Java:对象的强、软、弱和虚引用

见&#xff1a;http://zhangjunhd.blog.51cto.com/113473/53092 maven/Java/web/bootstrap/dataTable/app开发QQ群&#xff1a;566862629。希望更多人一起帮助我学习。 1&#xff0e;对象的强、软、弱和虚引用在JDK 1.2以前的版本中&#xff0c;若一个对象不被任何变量引用&am…

聊聊3种最常见的响应式设计问题

响应式设计方法对开发者非常有用&#xff0c;因为它使我们的内容在各种设备上广为传播。不用保留几个独立版本的网站&#xff0c;也可以摒除诸如缩放和流式布局这些方法的弊端。 缩放、流式布局与响应式 这些术语容易造成混淆&#xff0c;设计师常常错误地交替互用。实际上&…

帕累托分布(Pareto distributions)、马太效应

什么是帕累托分布 帕累托分布是以意大利经济学家维弗雷多帕雷托命名的。 是从大量真实世界的现象中发现的幂次定律分布。这个分布在经济学以外&#xff0c;也被称为布拉德福分布。 帕累托因对意大利20%的人口拥有80%的财产的观察而著名&#xff0c;后来被约瑟夫朱兰和其他人概括…

微信小程序的一些数据调用方式

1.模板数据的调用 一张图了解一下在wxml页调用预先定义好的模板&#xff1a; 可以看到上面调用了两个模板&#xff0c;数据调用却是不同的&#xff0c;obj是一个对象&#xff0c;对象内包含多个键值对形式的数据&#xff1b; tabbar是一个一维数组&#xff0c;每个数组项又都是…

解决:按截图 ctrl+alt+a QQ聊天窗口就自动最小化(QQ以外的可以截图)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、问题如题 &#xff0c;想截图QQ聊天记录都不行 二、 解决方法&#xff1a; 如图找到QQ截图按钮&#xff0c;点击下拉倒三角&…

数据库备份DBS商业化发布

数据库备份DBS商业化发布将在2018年7月11日 15:00-16:00直播&#xff0c;敬请关注&#xff01; 数据库备份DBS为数据库提供连续数据保护、低成本的备份服务。 它可以为多种环境的数据提供强有力的保护&#xff0c;包括企业数据中心、其他云厂商及公共云。数据库备份提供数据备份…

堡垒机(跳板机)

堡垒机&#xff08;跳板机&#xff09;&#xff1f;现在一定规模互联网企业&#xff0c;往往都拥有大量服务器&#xff0c;如何安全并高效的管理这些服务器是每个系统运维或安全运维人员必要工作。现在比较常见的方案是搭建堡垒机环境作为线上服务器的入口&#xff0c;所有服务…

Google 正式开源 Jib ,帮助 Java 应用快速容器化

Google 本周宣布开源一款新的 Java 工具 Jib &#xff0c;旨在让开发者使用他们熟悉的工具更轻松地将 Java 应用程序容器化。在7月9日发布的博客文章中&#xff0c;Google 软件工程师 Appu Goundan 和 Qingyang Chen 将 Jib 描述为一个容器镜像构建器&#xff0c;旨在处理将 Ja…

解决:Failed to execute goal on project aopcore: Could not resolve dependencies for project com.cmos:

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、问题描述 maven工程 jar包无法下载&#xff0c;报错如下 &#xff1a; [ERROR] Failed to execute goal on project aopcore: Cou…

服务容错保护断路器Hystrix之七:做到自动降级

从《高可用服务设计之二&#xff1a;Rate limiting 限流与降级》中的“自动降级”中&#xff0c;我们这边将系统遇到“危险”时采取的整套应急方案和措施统一称为降级或服务降级。想要帮助服务做到自动降级&#xff0c;需要先做到如下几个步骤&#xff1a; 可配置的降级策略&am…

Java实现Excel导入数据库,数据库中的数据导入到Excel

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 实现的功能&#xff1a; Java实现Excel导入数据库&#xff0c;如果存在就更新数据库中的数据导入到Excel1、添加jxl.jar mysql-connect…

HashMap中数组初始化的秘密

2019独角兽企业重金招聘Python工程师标准>>> 我们知道&#xff0c;在新建一个HashMap对象时&#xff0c;无论传的initialCapacity参数值为多少&#xff0c;最总HashMap中数组的长度始终为2的n次方&#xff0c;代码如下&#xff1a; static final int tableSizeFor(i…

PLSQL 安装+配置( Oracle数据库连接工具 )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.找到免安装版本 PLSQL 解压到自己想放的位置 &#xff08;比如 D:\ChengXu\PLSQL\PLSQL&#xff09; 2.配置环境变量 : 系统变量…

什么是Nginx?为什么使用Nginx?

一、前言为毛要用nginx服务器代理&#xff0c;不直接用tomcat 7.0&#xff0c;还做多了一次接请求&#xff1f;这个是我想问的&#xff0c;公司的新项目是要用Nginxtomcat7jdk开发的&#xff0c;用户命名可以直接访问tomcat&#xff0c;为啥还要用Nginx&#xff1f;这货是个啥玩…

遵循五大设计理念 打造出色设计师

与其他设计不同&#xff0c;网页设计会随着时间的改变而不断改变着。因此&#xff0c;网页设计师需要不断的自我提升&#xff0c;了解最前沿的设计趋势以便能够设计出更加新颖的网站。 两年前&#xff0c;网页设计呈现出一片新的思维方式和新颖的设计趋势使得该领域彰显出一片…

伪共享和缓存行填充,Java并发编程还能这么优化!

前言 关于伪共享的文章已经很多了&#xff0c;对于多线程编程来说&#xff0c;特别是多线程处理列表和数组的时候&#xff0c;要非常注意伪共享的问题。否则不仅无法发挥多线程的优势&#xff0c;还可能比单线程性能还差。随着JAVA版本的更新&#xff0c;再各个版本上减少伪共享…

Java中判断字符串是否为数字的五种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 推荐使用第二个方法&#xff0c;速度最快。 方法一&#xff1a;用JAVA自带的函数 Java代码 public static boolean isNumeric(String…

慕学在线网0.4_xadmin后台管理

admin是基于Django开发的后台管理框架&#xff0c;方便&#xff0c;快捷&#xff0c;而且简单&#xff1b;   而xadmin就相当于admin的升级版&#xff0c;更加强大。    1、安装xadmin&#xff08;源码安装方式&#xff09;  教程 PS&#xff1a; - 卸载pip安装的xadminp…