Jzoj5665 奥立卡的诗

【JZOJ6434】【luoguP5665】【CSP-S2019】划分 description analysis 首先有一个结论,对于[1,i][1,i][1,i]区间划分最后一段的和尽量小,答案会更优,具体证明参考毛爷爷的博客 设f[i]f[i]f[i]为满足[1,i][1,i][1,i]划分最优时、(f[i],i](f[i],i](f[i],i]这段和最小时的最右的端点,最优划分即为从nnn开始向fff不断统计 由后一段比前一段大可知sum[f[... 阅读详情

终于又遇到SAM的题了好好玩,而且就这道题让我弄清楚了广义SAM和Trie上SAM的区别

其实两者是没有多少区别的,不过Trie上SAM可以更快

关于Trie上SAM,是用bfs的方法来构建的,相比起广义SAM用dfs建少了一个深度之和的部分

但是如果原题给的就是Trie那么就只能用bfs了,因为dfs会被卡成O(n^2) (考虑一个扫把)

回到本题,简化一下式子发现这道题求的是不同子串的出现次数的平方和

我们建出整个诗的广义SAM,对于一次询问,

我们将一个串每个前缀对应的节点size都加一,树链剖分来维护所有节点的权值平方和

让后就愉快的过了

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 600010
#define LL long long
#define mid (l+r>>1)
#define ls l,mid,x<<1
#define rs mid+1,r,x<<1|1
using namespace std;
char C[N]; LL ans=0;
struct edge{ int v,nt; } G[N<<1];
int n,m,cnt,clk,h[N],f[N],d[N],sz[N];
int top[N],w[N],l[N],son[N],dx[N]; LL s2[N<<2],s[N<<2],t[N<<2],c[N<<2];
inline void ps(int x){ 
	s[x]=s[x<<1]+s[x<<1|1];
	s2[x]=s2[x<<1]+s2[x<<1|1];
}
inline void adj(int x,int y){
	G[++cnt]=(edge){y,h[x]}; h[x]=cnt;
	G[++cnt]=(edge){x,h[y]}; h[y]=cnt;
}
inline void dfs(int x,int p){
	f[x]=p; d[x]=d[p]+1; sz[x]=1;
	for(int v,i=h[x];i;i=G[i].nt)
		if(!d[v=G[i].v]){
			dfs(v,x);
			sz[x]+=sz[v];
			if(sz[v]>sz[son[x]]) son[x]=v;
		}
}
inline void dgs(int x,int p){
	w[++clk]=x; l[x]=clk; top[x]=p;
	if(son[x]) dgs(son[x],p);
	for(int v,i=h[x];i;i=G[i].nt)
		if(!top[v=G[i].v]) dgs(v,v);
}
inline void build(int l,int r,int x){
	if(l==r){ c[x]=dx[w[l]]; return; }
	build(ls);
	build(rs);
	c[x]=c[x<<1]+c[x<<1|1];
}
inline void pd(int x){
	if(t[x]){
		t[x<<1]+=t[x];
		t[x<<1|1]+=t[x];
		s2[x<<1]+=t[x]*t[x]*c[x<<1]+2*t[x]*s[x<<1];
		s2[x<<1|1]+=t[x]*t[x]*c[x<<1|1]+2*t[x]*s[x<<1|1];
		s[x<<1]+=c[x<<1]*t[x];
		s[x<<1|1]+=c[x<<1|1]*t[x];
		t[x]=0;
	}
}
inline void add(int l,int r,int x,int L,int R){
	if(L<=l && r<=R){
		s2[x]+=c[x]+2*s[x];
		s[x]+=c[x]; t[x]++; return;
	}
	pd(x);
	if(L<=mid) add(ls,L,R);
	if(mid<R) add(rs,L,R);
	ps(x);
}
inline void gLca(int x){
	for(;x;x=f[top[x]])
		add(1,n,1,l[top[x]],l[x]);
}
struct SAM{
	int s[N][26],mx[N],f[N],cnt,lst;
	SAM(){ cnt=lst=1; }
	inline int extend(int c){
		int p=lst,np=lst=++cnt,q,nq;
		mx[np]=mx[p]+1;
		for(;p&&!s[p][c];p=f[p]) s[p][c]=np;
		if(!p) return f[np]=1;
		q=s[p][c];
		if(mx[q]==mx[p]+1) f[np]=q;
		else{
			nq=++cnt;
			mx[nq]=mx[p]+1;
			f[nq]=f[q]; f[q]=f[np]=nq;
			memcpy(s[nq],s[q],26<<2);
			for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;
		}
	}
	inline void Ex_extend(int c){
		int p=lst,q=s[p][c],nq;
		if(q){
			if(mx[q]==mx[p]+1){ lst=q; }
			else{
				lst=nq=++cnt;
				mx[nq]=mx[p]+1;
				f[nq]=f[q]; f[q]=nq;
				memcpy(s[nq],s[q],26<<2);
				for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;
			}
		} else extend(c);
	}
	inline void BT(){
		for(int i=2;i<=cnt;++i){
			adj(f[i],i);
			dx[i]=mx[i]-mx[f[i]];
		}
	}
} S;
int main(){
	freopen("poem.in","r",stdin);
	freopen("poem.out","w",stdout);
	scanf("%d",&n);
	for(int j=0;n--;++j){
		scanf("%s",C+j); S.lst=1;
		for(;C[j];++j) S.Ex_extend(C[j]-'a');
	}
	n=S.cnt; S.BT(); dfs(1,0); dgs(1,1); build(1,n,1);
	for(int x=1,j=0;C[j];++j){
		x=1;
		while(C[j]){
			x=S.s[x][C[j]-'a'];
			gLca(x); ++j;
		}
		printf("%lld\n",s2[1]);
	}
}


vscode远程连接deepin出错:过程试图写入的管道不存在的解决方法 背景:昨天我用vscode使用ssh远程开发还处于正常状态,今天刚打开电脑,并启动deepin,再次使用vscode重新连接就出现异常。意思就是22号默认端口连接被拒绝,所以要先确定ssh是否连接。3.重新进入vscode里面,重新连接,如图成功连接。,查看port后面的端口号是不是22号。1.检查sshd是否启动。 阅读详情

相关推荐

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 452

jzoj小明解密码【快速幂】【递归】

&gt; Description 求出t组n的m次幂,输出个位数字。 &gt;Input 第一行,一个正整数t,表示一共有t个密码门 接下来t行,每行两个正整数n,m(n,m≤10^10),表示密码门上的数字 &gt;Output t行,每行一个整数,表示密码门对应的密码,由于答案过大,你只需要输出密码的最后一位 &gt;Sample Input 2 3 4 4 5 &gt;Sample Ou...

//(^ o ^)// 488

量子城域网建设设备系列(三):网络管理系统(NMS)

本文对量子网络中的网络管理系统进行了初步的介绍。

量子领域相关话题 2012

[JZOJ5129][SDOI省队集训2017]字符串

题目大意从n个字符串中依次选出一个子串拼接,求本质不同的数量。SAM我们尽量长化前面的。 于是倒着做,对每个串都要建SAM。 只需要处理开头是某个字符的方案数,SAM的一个节点没有该转移边即可。 大概就这样,懒得写清楚了。#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(i=a;i<=b;i

不来也不去的一只失忆蝴蝶 797

避坑指南:LISFLOOD-FP模型数据单位、参数文件与results文件夹结果解析全攻略

本文详细解析了LISFLOOD-FP洪水模拟模型的关键应用环节,包括数据单位校验、参数文件优化及结果文件解读与可视化。特别针对常见的单位混淆问题,提供了从DEM到边界条件的全面校验方法,并深入剖析了.par参数文件的配置技巧,帮助用户避免模型崩溃和结果失真。

weixin_42533622的博客 236

OpenVins解析:基于滤波框架的SLAM

这一方式存在的关键问题是匹配耗时很长,对性能影响显著。可以参考ORBSLAM3中的匹配方式来对其优化,比如左右目匹配可以在极线上搜索,前后帧可以利用运动先验投影匹配。理论上加入路标点会提升精度,代价是增加了计算量。着重说下基于描述子的匹配:OpenVins中匹配的方式是robust_match(),里面是调用的opencv的。openvins中不仅仅进行了传统的MSCKF更新(状态向量中不包含路标点),还在。中进行了包含路标点的估计更新。图像帧到来时,利用IMU递推得到的位姿给该图像帧赋初值。

qq_18076309的博客 4073

找回密码 jzoj 4025 后缀自动机

题目 Kevin是一个热爱字符串的小孩。有一天,他把自己的微信登录密码给忘记了,万般无奈之下只好点“找回密码”。 这时候,网页上出现了当初设定的密保问题:在字符串st中,有若干个内容不同的子串,请问其中字典序第k小的子串是什么? 很可惜的是,Kevin现在已经不会写程序了,所以,他找到了睿智的你来帮忙。 分析 对串创建SAM,然后,拓扑一下,算出每个状态,如果继续往后边走,能够生成多少种...

A_loud_name 572

【51单片机仿真】基于51单片机设计的多功能电子时钟日历(实时时钟闹钟秒表温度检测)系统__资料编号5

该项目是基于单片机的多功能电子时钟系统,集成了时间显示、闹钟设置、秒表功能以及温度显示等功能。主要硬件包括1602液晶显示屏、DS1302时钟芯片、DS18B20温度传感器和蜂鸣器。系统通过按键进行时间和闹钟的设置,并实时显示当前时间和温度。

嵌入式阿齐Archie 2万+

Jzoj4439 不是回文串

我倒是觉得上面那一问难一点呢。。。。 下面一个SAM就没掉了,上面还要加上倍增和马拉车 size为right集合大小,mx为最大长度,跑出parent树,OK搞定 #include<stdio.h> #include<string.h> #include<algorithm> #define N 2000010 ...

dianning8393的博客 240

QT+Opencv实现视频流播放

1.流程 首先通过opencv打开视频流,获取到数据帧,然后将数据帧转换为QT可识别的图像,显示到QT界面上。 2.opencv解码线程源码 //DecodeOpencv.h #pragma once #include <QThread> #include <QObject> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/img..

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 6459

华为OD机试真题2025双机位C卷 C++ 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 280

《奥利卡的诗》

Do not stand at my grave and weep,  I an not there, I do not sleep.  I am in a thousand winds that blow,  across Northreand'' s bright and shining snow.  I am the gentle showers of rain,  on Westfall'...

Mickyb 3060

5、模糊风险评估

本文介绍了基于模糊逻辑的风险评估方法,探讨了如何在不确定、不完整信息环境下进行高效的风险分析。文章涵盖了模糊集合与隶属度函数的基本概念、模糊推理系统的流程,并结合犯罪风险、金融风险和医疗诊断等实际案例,展示了模糊风险评估的应用价值和技术细节。此外,还介绍了模糊贝叶斯网络、模糊综合评价等进阶工具与方法,为多领域风险管理提供了理论支持和实践指导。

mango的博客 179

【GDOI2018Day2模拟4.18】奥利卡的诗

DescriptionInput从文件poem.in中读入数据. 第一行两个整数n. 接下来若干行有n个单词,用空格或回车隔开.Output输出到文件poem.out中. 输出n行n个整数,第i个整数表示elegancy(i).Sample Input输入1: 2 nyg nyxSample Output输出1: 6 18Data Constraintn<=105,∑|s|<=3∗1

Jacky35 772

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JZOJ4025. 【佛山市选2015】找回密码(后缀自动机SAM)

题目描述 Description Kevin是一个热爱字符串的小孩。有一天,他把自己的微信登录密码给忘记了,万般无奈之下只好点“找回密码”。 这时候,网页上出现了当初设定的密保问题:在字符串st中,有若干个内容不同的子串,请问其中字典序第k小的子串是什么? 很可惜的是,Kevin现在已经不会写程序了,所以,他找到了睿智的你来帮忙。 Input 输入数据包括两行:第一行为字符串st,第二...

某司机的黑车 614

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JZOJ 2126~2129 题目

目录: 2126. 【GDOI2003】删边 2127. 【GDOI2003】骑士问题 2128. 【GDOI2003】排列的编码 2129. 【GDOI2003】求值 2126. 【GDOI2003】删边 Description   连通图是指任意两个顶点都有路径可互相到达的图。   读入一个无向的连通图,输出最多能删掉多少条边,使这个图仍然连通。 Input   ...

qq_35786326的博客 597

【JZOJ3962】【NOI2015模拟12.27】str(回文自动机)

Problem   给出一个字符串,求这个串中本质不同的回文子串个数以及这些本质不同的回文子串中第K小的串。 Input Output Hint Solution   首先,我们发现它要求本质不同的回文子串个数,于是马上联想到回文自动机。看看数据,10510510^5,非常稳。于是第一问就用回文自动机解掉。不知道回文自动机的戳这里→这里写链接内容   那么...

qq_36551189的博客 360

Jzoj4734 恶魔

其实就是在求有几对完全相等子串满足长度小于等于k而已 很明显打一个sam就好了,条件就是mx[f[p]]<k就可以计算贡献 #include<stdio.h> #include<string.h> #include<algorithm> #define N 200010 using namespace s...

dianning8393的博客 194

51Nod1207 内存管理

题目看这里这么好玩的数据结构题肯定是要来做一做啦考虑splay-显然用一个节点去维护一个连续的内存块,每次申请内存就找一块尽可能前的,释放就找一个有相交的并合并,没有则新建节点splay一打还是错落百出,不过效率还是可以的,跑了第一和map一样快#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;algorithm&gt; #d...

扩展の灰(Extended Ash/Cooevjnz) 388

jzoj4025-找回密码【后缀自动机】

正题 大意 一个字符串,要求第k小的子串。 解题思路 先建立一个后缀自动机,然后用一个numinuminum_i表示第iii个节点的可以到达的点所表示的子串总和,然后从第1号点开始查找,判断一下找到第k小所在的节点后,然后查找输出。 代码 #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;cst...

QuantAsk 646

JZOJ5915 [2018NOIP模拟] 明日之星(广义后缀自动机,线段树)

题目描述 给定一棵树,每个节点有一个权值 \(a_i\) 和一个字符串 \(s_i\)。 q组询问,每次询问一个字符串 S 和两个节点x,y: 求x到y路径上每个节点的字符串在 S 中出现的次数乘上各自的权值总和。 有单点修改权值的操作。 $n,q\leq 200000,\sum s_i,\sum S\leq 400000 $ 强制在线,但询问串不加密。 sol 先 Orz 神仙Joun...

weixin_30246221的博客 850

[CF700E][JZOJ5558]Cool Slogan (后缀自动机+线段树)

题意翻译 给出一个长度为$n$的字符串$s[1]$,由小写字母组成。定义一个字符串序列$s[1....k]$,满足性质:$s[i]$在$s[i-1]$ $(i>=2)$中出现至少两次(位置可重叠),问最大的$k$是多少,使得从$s[1]$开始到$s[k]$都满足这样一个性质。 题解   看了一个中午的代码终于弄懂了……$yyb$大佬强无敌……   一开始以为是SAM建好之后直接上$d...

weixin_33725239的博客 236

[JZOJ5617]【NOI2018模拟3.31】化龙转生

Description有一个N×MN\times M的矩阵,每个位置有两个值a,b,代表一个同余方程x≡a(modb)x\equiv a\pmod b一个子矩阵是合法的,当且仅当将其中的每个同余方程联立时有解 求合法子矩阵最大面积 N,M≤150,0≤a<b<40N,M\leq 150,0\leq a<b< 40Solution考虑如何判断两个同余方程是否有公共解 方程化为x=a1+k1b1=

Never give in. 329

[JZOJ4964]Rhyme

题目大意给定若干个模板串{Ti}\{T_i\}。你要求出一个最长的字符串SS,使得SS中任意长度为KK的子串都是一个模板的子串。请输出这个长度,如果可以无限长就输出INF。 所有字符都是小写拉丁字母。1≤∑|Ti|≤105,1≤K≤1051\le\sum|T_i|\le10^5,1\le K\le10^5题目分析建出模板串集合的TrieTrie,然后在上面建个SAM\mathrm{SAM}。然后在

待成熟的葡萄 747

一些基础算法的模板(持续更新)

更新中 //Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft //To be continued... //Suffix Automation char str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin

扩展の灰(Extended Ash/Cooevjnz) 3865
上一篇: Jzoj5644 凫趋雀跃
下一篇: Jzoj5669 排列
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值