【NOI2015】【BZOJ4199】品酒大会
Description
Input
Output
Sample Input
Sample Output
HINT
Source
BZOJ无题面233
反正网上一堆自己下载叭>_<
对反串建SAM然后DP
第一问和AHOI2013差异完全一样
具体解法:
设Ans1[i]为lcp恰为i的后缀对数,Ans2[i]为lcp恰为i的后缀的价值乘积的最大值
建出SAM后,记录子树中后缀个数、价值的最大值、价值的最小值,然后O(n)DP即可
在SAM里DP完记得最后统计到Ans1和Ans2里去
size会爆int…一开始开的int一直WAWAWAWA…
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 600100
#define LL long long
#define MAXINT 1ll<<60
using namespace std;
int n,top;
LL A[MAXN];
char ch[MAXN];
LL Ans1[MAXN],Ans2[MAXN];
struct edge
{int to;edge *next;
}e[MAXN<<1],*prev[MAXN];
void insert(int u,int v)
{e[++top].to=v;e[top].next=prev[u];prev[u]=&e[top];
}
void in(LL &x)
{char ch=getchar();x=0;int flag=1;while (!(ch>='0'&&ch<='9')) flag=ch=='-'?-1:1,ch=getchar();while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();x*=flag;
}
struct sam
{int cnt,last,p,q,np,nq;int a[MAXN][26],len[MAXN],fa[MAXN];LL maxn[MAXN],minn[MAXN],ans1[MAXN],ans2[MAXN],size[MAXN];sam(){last=++cnt;}void insert(int c,int x){p=last;last=np=++cnt;len[np]=len[p]+1;size[np]=1;maxn[np]=minn[np]=A[x];while (!a[p][c]&&p) a[p][c]=np,p=fa[p];if (!p) fa[np]=1;else{q=a[p][c];if (len[q]==len[p]+1) fa[np]=q;else{nq=++cnt;len[nq]=len[p]+1;maxn[cnt]=-MAXINT;minn[cnt]=MAXINT;memcpy(a[nq],a[q],sizeof(a[q]));fa[nq]=fa[q];fa[q]=fa[np]=nq;while (a[p][c]==q) a[p][c]=nq,p=fa[p];}}}
}sam;
void dfs(int x)
{for (edge *i=prev[x];i;i=i->next){dfs(i->to);sam.ans1[x]+=sam.size[x]*sam.size[i->to];sam.size[x]+=sam.size[i->to];if (sam.maxn[x]!=-MAXINT)sam.ans2[x]=max(sam.ans2[x],sam.maxn[i->to]*sam.maxn[x]);if (sam.minn[x]!=MAXINT)sam.ans2[x]=max(sam.ans2[x],sam.minn[i->to]*sam.minn[x]);sam.maxn[x]=max(sam.maxn[x],sam.maxn[i->to]);sam.minn[x]=min(sam.minn[x],sam.minn[i->to]);}
}
int main()
{freopen("savour.in","r",stdin);freopen("savour.out","w",stdout);scanf("%d",&n);scanf("%s",ch);sam.maxn[1]=-MAXINT;sam.minn[1]=MAXINT;for (int i=1;i<=n;i++) in(A[i]);for (int i=n;i;i--) sam.insert(ch[i-1]-'a',i);for (int i=0;i<=sam.cnt;i++) sam.ans2[i]=-MAXINT;for (int i=1;i<=sam.cnt;i++) insert(sam.fa[i],i);dfs(1);for (int i=0;i<n;i++) Ans2[i]=-MAXINT;for (int i=1;i<=sam.cnt;i++) Ans1[sam.len[i]]+=sam.ans1[i],Ans2[sam.len[i]]=max(Ans2[sam.len[i]],sam.ans2[i]);for (int i=n-2;i>=0;i--){Ans1[i]+=Ans1[i+1];if (Ans1[i+1]) Ans2[i]=max(Ans2[i],Ans2[i+1]);}for (int i=0;i<n;i++) printf("%lld %lld\n",Ans1[i],Ans1[i]?Ans2[i]:0);
}
【NOI2015】【BZOJ4199】品酒大会相关推荐
- UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)
UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...
- 【NOI2015】BZOJ4199品酒大会题解(SAM+树形DP)
题目:BZOJ4199. 题目大意:给定一个字符串SSS,并给出一个长度为∣S∣|S|∣S∣的序列aia_iai.现在设SiS_iSi表示SSS以第iii个字符开始的后缀,对于每个0≤r<∣ ...
- 【NOI2015】品酒大会【后缀数组】【并查集】
传送门 传送门 题意:给一个长度为NNN的字符串和一个长度为NNN的序列AAA,对于所有的k∈[0,N−1]k \in [0,N-1]k∈[0,N−1],求选出两个数i,ji,ji,j满足lcp(su ...
- NOI 2015 品酒大会
#131. [NOI2015]品酒大会 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和" ...
- [BZOJ4199][NOI2015]品酒大会-后缀数组
品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和"首席猎手" ...
- 洛谷P2178 [NOI2015]品酒大会 后缀数组+单调栈
P2178 [NOI2015]品酒大会 题目链接 https://www.luogu.org/problemnew/show/P2178 题目描述 一年一度的"幻影阁夏日品酒大会" ...
- BZOJ 4199 [Noi2015]品酒大会(后缀自动机 + parent树上统计)
4199: [Noi2015]品酒大会 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1598 Solved: 905 [Submit][Stat ...
- 洛谷 P2178 [NOI2015]品酒大会 解题报告
P2178 [NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和 ...
- [NOI2015]品酒大会
题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和"首席猎手"两个奖项 ...
- [bzoj 4199][NOI 2015]品酒大会
传送门 Description 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发"首席品 酒家"和"首席猎 ...
最新文章
- Java项目:考试系统Java基础Gui(java+Gui)
- shell技巧之以逆序形式打印行
- ansible(基础)
- Xshell替代品 -- FinalShell
- springboot异步注解_Spring Boot 2 :Spring Boot 中的响应式编程和 WebFlux 入门
- 整理JS+FLASH幻灯片播放图片脚本代码
- CALL 和 ret 指令
- 哈夫曼算法(huffman algorithm C)
- 机器学习人才的职业薪酬也发展
- 如何优雅的输出PHP调试信息
- DVWA系列之20 反射型XSS分析
- FlashFXP如何破解
- PMP 成本计算相关
- 有别于普通专线的BGP线路
- 全文翻译 | 华为、北大、悉尼大学:最新视觉Transformer综述(2017-2020年)
- WIN32 opengl绘制一个点
- 「我是为“数据”去的京东」对话京东供应链首席科学家申作军
- 医药研发产业新平台在从化
- 小甲鱼python入门_python基础笔记(非系统/自用/参考小甲鱼的零基础入门学习python)上...
- 【.Net实用方法总结】 整理并总结System.IO中MemoryStream类及其方法介绍
热门文章
- ibatis中配置parameterClass=java.util.HashMap的用法
- c++虚函数实现原理
- 实体对齐 算法_[2017]Bootstrapping Entity Alignment with Knowledge Graph Embedding
- HTC ONE X刷ruu的详细刷机教程
- 2021-2022学年广州市育才实验学校九年级第一学期期中考试英语试题
- Seq2Seq模型及Attention机制
- 杨辉三角循环队列实现(数据结构c语言版)
- 虚拟机VMware中Linux联网
- python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图
- 右键菜单“新建”的修改