【JZOJ 6028】【GDOI2019模拟2019.2.23】字符串

【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例 内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。 立即下载

Description

在这里插入图片描述

Solution

先考虑对一个串的子串求不同子串的个数怎么做,

先对询问离线,
考虑不断右移右端点,同时维护左端点为1~i的答案,
显然对于一种相同的子串,只计算最右边的,
在SAM中,一个节点代表了一些子串,而这些子串Right的最大值,也就是Fail树上这个点的所有儿子的Right最大值,
所以每次加入一个点,相当于更改一条链上点的Right最大值,
我发现这个就是LCT上的Access操作,
所以做Access时维护区间加减即可,

复杂度:O(nlog⁡2(n))O(n\log^2(n))O(nlog2(n))

Code

#include <cstdio>
#include <algorithm>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
#define min(q,w) ((q)>(w)?(w):(q))
#define max(q,w) ((q)<(w)?(w):(q))
#define NX(q) ((q)&(-(q)))
#define SD(q) (b[b[q].fa].r==(q))
using namespace std;
typedef long long LL;
const int N=600500;
int read(int &n)
{
	char ch=' ';int q=0,w=1;
	for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
	if(ch=='-')w=-1,ch=getchar();
	for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int m,n,ans;
int a[N],anx[N];
int ASK[N][3];
LL Ans[N];
int B[N][2],A[N],B0;
int zx[N];
struct SAMT
{
	int a[29];
	int fail,rx,ti;
}b[N];
int b0=1;
int p[N];
bool PX(int q,int w){return b[q].ti<b[w].ti||(b[q].ti==b[w].ti&&b[q].rx<b[w].rx);}
LL sum[N][2];
void ADD(int q,int e){for(int e1=e*(n-q+1LL);q<=n;q+=NX(q))sum[q][0]+=e,sum[q][1]+=e1;}
LL FD(int Q)
{
	LL ans=0,ans1=0;
	for(int q=Q;q;q-=NX(q))ans+=sum[q][0],ans1+=sum[q][1];
	return ans1-(n-Q)*ans;
}
void change(int l1,int r1,int l2){ADD(l1,l2),ADD(r1+1,-l2);}
LL find(int l1,int r1){return FD(r1)-FD(l1-1);}
struct LCTv
{
	struct qqww
	{
		int l,r,fa,Fa,si;
		int miv,mxv,rx;
		int mi,mx;
	}b[N];
	int b0;
	void doit(int q)
	{
		b[q].si=b[b[q].l].si+b[b[q].r].si+1;
		b[q].mi=min(b[q].miv,min(b[b[q].l].mi,b[b[q].r].mi));
		b[q].mx=max(b[q].mxv,max(b[b[q].l].mx,b[b[q].r].mx));
	}
	void rotate(int q)
	{
		int w=b[q].fa;
		swap(b[q].Fa,b[w].Fa);
		swap(b[q].rx,b[w].rx);
		if(SD(q))
		{
			b[w].r=b[q].l;
			b[b[q].l].fa=w;
			b[q].l=w;
		}else
		{
			b[w].l=b[q].r;
			b[b[q].r].fa=w;
			b[q].r=w;
		}
		if(SD(w))b[b[w].fa].r=q;
		else b[b[w].fa].l=q;
		b[q].fa=b[w].fa;b[w].fa=q;
		doit(w),doit(q);
	}
	void Splay(int q,int T)
	{
		for(;b[q].fa!=T;)
		{
			if(b[b[q].fa].fa!=T)
			{
				if(SD(q)==SD(b[q].fa))rotate(b[q].fa);
				else rotate(q);
			}
			rotate(q);
		}
	}
	void access(int q,int rx)
	{
		int w=q;
		for(q=b[q].Fa;q;w=q,q=b[q].Fa)
		{
			Splay(q,0);
			b[b[q].r].rx=b[q].rx;
			b[b[q].r].fa=0,b[b[q].r].Fa=q;
			b[q].r=0;doit(q);
			change(b[q].rx-b[q].mx+1,b[q].rx-(b[q].mi)+1,-1);
			// change(b[q].rx-b[q].mx+1,b[q].rx-b[q].mi+1,-1);
			b[q].rx=rx;b[w].rx=0;
			b[q].r=w;b[w].fa=q;b[w].Fa=0;doit(q);
		}
		change(rx-b[w].mx+1,rx-b[w].mi+1,1);
	}
	int Doit(int mi,int mx,int rx,int fa)
	{
		mi=min(mx,mi);
		b[++b0].miv=mi;b[b0].mxv=mx;
		b[b0].Fa=fa;b[b0].rx=rx;
		doit(b0);
		access(b0,rx);
		return b0;
	}
}LCT;
void link(int q,int w){B[++B0][0]=A[q];A[q]=B0,B[B0][1]=w;}
int nw=1;
void Join_SAM(int c)
{
	++b0;
	b[nw].a[c]=b0;
	b[b0].rx=b[nw].rx+1;
	b[b0].ti=b[nw].ti+1;
	int q,p;
	for(q=b[nw].fail;q&&!b[q].a[c];q=b[q].fail)b[q].a[c]=b0;
	nw=b0;
	p=b[q].a[c];
	if(!q)b[b0].fail=1;
	else if(b[p].rx==b[q].rx+1)b[b0].fail=p;
	else
	{
		++b0;
		b[b0].ti=b[p].ti;
		b[b0].fail=b[p].fail;
		b[nw].fail=b[p].fail=b0;
		b[b0].rx=b[q].rx+1;
		fo(i,0,25)b[b0].a[i]=b[p].a[i];
		for(;q&&b[q].a[c]==p;q=b[q].fail)b[q].a[c]=b0;
	}
}
void Doit(int m)
{
	fo(i,1,b0)p[i]=i;
	sort(p+1,p+1+b0,PX);
	fo(i,1,m)link(ASK[i][1],i);
	int L=2;
	LCT.b[0].mi=1e9;
	fo(i,1,n)
	{
		for(;L<=b0&&b[p[L]].ti<=i;++L)
		{
			int q=p[L];
			// printf("%d\n",q);
			zx[q]=LCT.Doit(b[b[q].fail].rx+1,b[q].rx,b[q].ti,zx[b[q].fail]);
		}
		efo(j,i)
		{
			Ans[B[j][1]]=FD(i)-FD(ASK[B[j][1]][0]-1);
		}
	}
}
int main()
{
	freopen("zifuchuan.in","r",stdin);
	freopen("zifuchuan.out","w",stdout);
	int q,w;
	char ch=getchar();
	for(;ch>='a'&&ch<='z';ch=getchar())a[++n]=ch-'a'+1;
	q=0;
	fo(i,2,n)
	{
		for(;q&&a[q+1]!=a[i];q=anx[q]);
		if(a[q+1]==a[i])++q;
		anx[i]=q;
	}
	w=n-anx[n];
	int la=anx[n];
	for(q=anx[n];q;q=anx[q])
	{
		if(la-anx[q]>w)
		{
			w=0;
			break;
		}
		else if(la-anx[q]==w)la=anx[q];
	}
	if(w&&!la)n=w;
	int n1=n;
	fo(i,n+1,n*3)a[i]=a[i-n];n*=3;
	fo(i,1,n)Join_SAM(a[i]-1);
	read(m);
	fo(i,1,m)
	{
		read(q),read(w);
		if(q>n1)
		{
			int t=(q-1)/n1;
			q-=t*n1,w-=t*n1;
		}
		ASK[i][0]=q,ASK[i][2]=w;
		if(w<=n)ASK[i][1]=w;
		else ASK[i][1]=q+n1*2-1;
	}
	Doit(m);
	fo(i,1,m)
	{
		Ans[i]+=(LL)(n1)*(ASK[i][2]-ASK[i][1]);
		printf("%lld\n",Ans[i]);
	}
	return 0;
}
国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

[JZOJ6028]【GDOI2019模拟2019.2.23】字符串【SAM】【LCT】【线段树】

Description Solution 不妨先考虑subtask 2 即给出一个字符串S,动态询问[l,r]内本质不同的子串数。 有一个非常套路的做法(来自laofu的2018集训队论文): 考虑离线。先将这个字符串S的SAM建出来 对于SAM上的一个节点,贡献就是它在[l…r]出现的最后一次被l所截的长度。 我们将所有询问按右端点排序,从左到右扫r。 那么每次相当于在parent树上将一个...

Never give in. 490

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

【GDOI2019模拟2019.2.23】字符串

Description: 题解: 首先思考一个经典的问题怎么做? 就是求一个串的子串的不同子串数,这玩意儿冬令营上《字符串前沿算法》讲过。 考虑在把整个串的SAM建出来,注意建的时候记录每个结尾点。 然后一个一个把结尾点激活,之所以要先建出来的原因是树的形态就稳固了。 假设要查询[l…r]的不同子串数,先把r以前的结尾点激活。 如果知道每个点的rmax,这个点的深度代表的是[x…y],那么就给...

Cold_Chair的博客 426

基于FME—三调篇—尖锐角及小缝隙处理

1 问题分析: 该功能实现在FME较为简单,相对ARCGIS模型构建器以及ARCGIS ENGINE,FME更适合无代码基础的人群。在三调内业数据处理要求中,尖锐角是不允许存在的。本文基于FME实现了对尖锐角的自动查询与消除以及自动处理在消除尖锐角过程中产生的缝隙,并进行了拓扑检查,实现自动化批量处理尖锐角的功能,提高工作效率。 2 总体思路: 2.1 实现功能分析: 1.找出小于指定角度的尖锐角...

qq_33315579的博客 9180

5、OpenClaw(龙虾助手)飞书机器人完整对接指南(2026最新版)

OpenClaw v2026.2.2+ 版本,防火墙内也能正常工作,是目前最稳定、最简单的企业内部AI助手部署方案。

欢迎光临~知1而N的博客 457

【GDOI2019模拟2019.3.23】总结

Text 今天的比赛感觉还是没有发挥出水平,被困死在了一道题 T1一开始蹦出一些思路,都没有什么好办法做,先写了个50分去看下一题 T2随手推了一会式子,这不是常系数齐次线性递推么…(完全忽略掉能不能过…) 然后又是写啊写,调啊调 一直搞到12:30… 一测极限,怎么跑个1分钟都跑不出来… 心态崩了 赶快去看T3,感觉是网络流之类的东西,但是不会建图… 打了人口普查的分 最后50+60+16, T...

Never give in. 354

iOS In-App Purchase 自动续订订阅完整实现指南

本文摘要: 自动续订订阅是iOS应用变现的核心模式,适用于流媒体、云存储等持续服务场景。文章系统讲解了从配置到实现的完整流程:首先对比各类订阅模式特点,解析订阅生命周期和关键术语;然后详细说明App Store Connect中的订阅组创建、产品配置和服务器通知设置;最后展示客户端StoreKit实现方案,包括产品标识符定义、订阅管理器封装和支付队列观察机制。全文提供可落地的代码示例和技术细节,帮助开发者掌握自动续订订阅的全链路实现。

Sheffi 1758

jzoj6027. 【GDOI2019模拟2019.2.23】签到

题目描述 Description Input Output Sample Input 20 1 4 3 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Sample Output 9 Data Cons...

某司机的黑车 394

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA?

本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。

convnet3designer的博客 239

HFSS实战(三)——过孔via TDR仿真

在上一讲中,主要是通过观察S参数确定via的优化是否达到目标。但S参数只能看到一个整体的结果,并不知道via真实的阻抗是多少?想要单独确定via的阻抗,最好还是通过TDR的仿真。

luohuo9844的博客 1万+

[JZOJ6022]【GDOI2019模拟2019.2.15】求和【排列组合】【中国剩余定理】

Description Solution ∑i=0N∑j=0M[i,j&amp;nbsp;is&amp;nbsp;even](ij)\sum\limits_{i=0}^{N}\sum\limits_{j=0}^{M}[i,j\ is\ even]{i\choose j}i=0∑N​j=0∑M​[i,j&amp;nbsp;is&amp;nbsp;even](ji​) =∑j=0M[j&amp;nbsp;is&amp;nbsp;even]∑i=...

Never give in. 544

汇川机器人与PLC通信-ModbusTCP超详细案例

通过汇川机器人与PLC的ModbusTCP通信项目案例,我们可以了解通讯配置的过程,地址映射的方式,对接信号的转换,运行时序的逻辑等注意事项,帮助我们快速应用到项目中。

weixin_44166380的博客 1万+

【JZOJ 3427】归途与征程

Solution 题意简化以后就是:在b串的同构中,有多少个可以按顺序匹配多个串。 我们可以先把a串拆开,每个做一遍KMP的预处理, 倍长b串,枚举b串的开头,依次匹配过去, 每次匹配的时候,记录一下上一次匹配失败的位置,直接从上次匹配失败的地方开始匹配;成功是也记录一下,判断一下

1300

无网络环境部署:手动获取并安装OneNote for Windows 10完整指南

本文提供了一份详尽的OneNote for Windows 10离线安装指南。针对无网络或内网隔离环境,详细介绍了如何从官方渠道获取正确的产品ID,利用第三方工具下载纯净的.appxbundle安装包,并解决系统兼容性与依赖框架问题。最后,通过PowerShell管理员命令完成安全部署,是IT管理员和高级用户在离线环境下部署UWP应用的实用参考。

loss4bartender的博客 495

CenterPoint 工程复现

CenterPoint 工程复现,本文中使用版本:BEVerse工程下的mmdet3d (`MMDet3d v0.17.3`)版本,MMDetection3D中其他版本的使用`大同小异`。

Darchan的博客 5663

【GDOI 2016 Day1】第二题 最长公共子串

抽象题意:给出两字符串S,T,求经过一些奇怪的操作后的最长公共子串 Solution 很显然一些有交集的区间是可以合并的, 一个区间内我们只需要记录每个字母的个数, 我们就可以枚举两个字符串的相对位置,然后在重叠的部分用指针维护, 设区间i,j是合法的, 我们现在把j往后移一位,j所在的区间的字母$T_j$个数就-1, 然后把再移动指针i去使其合法,i所在的区间的$T_i$个数就+1,并且i++;直到合法或移爆

1123

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【NOIP2015模拟11.2】复制&粘贴2

Description文本编辑器的一个最重要的机能就是复制&粘贴。JOI社现在正在开发一款能够非常高速地进行复制&粘贴的文本编辑器,作为JOI社一名优秀的程序猿,你担负起了复制&粘贴功能的测试这一核心工作。整个JOI社的命运都系在你的身上,因此你无论如何都想写出一个正确且高速的程序来完成这项工作。 具体的做法如下所示。文件的内容是一个字符串S,对其进行N(N<=2*10^5)次复制&粘贴的操作,第

829

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

【GDOI2016模拟3.9】暴走的图灵机

Description solution显然,这是一个像斐波拉契数列的东西,问题变成了求这个序列操作(n-1)次后与T的最大匹配, KMP自己学 当我们“左手右手一个慢动作”搞出两个长度大于m的串(设为A串和B串),这是我们来模拟一下A,B串之后的变化: A B AB BAB ABBAB BABABBAB ……. 我们又发现:因为A,B串的长度是大于m的

807

【JZOJ 4624】字符串匹配

Description Solution 很显然的KMP嘛, 把T串加长,然后把n求个余数然后除一下,再倍长后做几遍KMP即可, 复杂度:O(n)O(n)

736

【GDOI 2017】【JZOJ 1502】小学生语文题

Description给出一个原始串和目标串,要求在原始串上不停的把后面的字符移动到前面去,用最少的步数使两串相同。 n<=2000n<=2000Solution用DP:fi,jf_{i,j}表示目标串匹配到了i,原始串匹配到了j, 那么当前有两种选择: 1. 如果两位置字符相同,则直接匹配; 2. 当前这位的目标串然后面的来匹配,先跳过; 3. 当前这位的原始串去匹配前面跳过的目标串(当

662

【JZOJ 5220】【GDOI2018模拟7.10】C

Description设A、B两字符串的最长公共公共前缀长度为L,那么在A串所有长度为L的子串中,有多少个同时是B的子串。Solution把题目改成:“A、B串中所有长度为L的子串,有多少个是两两相同的”,那么这个直接用求最长公共子串的DP加上统计方案数即可,注意细节;那么这题怎么做呢? 设i,j,k,保证ai=aj,ai=ak,j<ka_i=a_j,a_i=a_k,j<k这三个条件 那么有结论

550

【JZOJ 3870】单词检索

Description小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。 由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可N篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L。可是,工作量十分庞大,但校长又急需小可可完成这项任务。 现在他向你求助,需要你编写程序完成这项艰巨的任务。Solution这

533

【JZOJ 5272】神奇的重复序列

DescriptionSolution枚举两字符串的开头,暴力往后扫大家应该会做吧, 设两字符串开头为x,y(x<y)x,y(x<y),设k=y−xk=y-x 我们发现,如果对于多个位置,如果它在所在串的相对位置%k是相同的,那么这几个位都必须相同, 比如:两串的开头为1、3,k=2,那么,1、3、5、7等都必须相等, 换句话说,就是在两串相交时,会有一定的周期性, (大家写两个数据看看就

497

【AtCoder】【ARC077F】SS

Description 给出对于字符串的函数F(x),表示在字符串后面加至少一个字符,使得新串由两个一样的字符串组成,如:f(aaabbb)=aaabbbaaabbb 求对原串进行了无限次f()后的串,从第l位到第r位,每个字母出现了对少次 保证原串是由两个相同的串组成。 Solution 设原串为SS,由两个字符串S组成, 考虑第一次变化: 肯定是找出最短的T,使得T是S最短的...

482
上一篇: 【JZOJ 6026】【GDOI2019模拟2019.2.23】飞行棋
下一篇: 【多项式】多项式逆元/开方/取模/多点求值/插值/牛顿迭代/对数/exp/幂
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值