2019.10.05题解

 

这次考试总体来说还是挺简单的,但由于T2卡常,导致T3只打了30分的暴力。

 

T1

挺像原来B组的T2,但是由于每次都是固定数m次,所以可以每次直接跳到改取mod的那次操作,

因为mod越来越大,

从n->n-m+1->n-2*m+1,

跳的次数从m->m/2->m/3-......>m/(n/m)

可以发现是个调和级数,时间复杂度 $ O(m*ln(m)) $。B哥说复杂度是O(m+log2(m))

但是我没听懂他的证明。

ps:和我的思路一样的代码在m=1e7是都会TLE,足以证明log是乘而不是加

 

T2

我的打法是分治,[L,R]的ans分为[L,mid]的ans和[mid+1,R]的ans,以及两边乘起来的贡献。

需要维护以下几个量:

$sum a[i]^2$

$sum b[i]^2$

$sum a[i]*b[i]$

用线段树实现即可。

 

T3

其实很水......

f[i][j]代表a序列考虑到第i个,b序列考虑到第j的且b[j]必须选的LCIS。

g[i][j][0/1]代表f[i][j]的转移点,记两个的原因下面有。

1>a[i]!=b[j] f[i][j]=f[i-1][j],g[i][j][0/1]=g[i-1][j][0/1];(i并不一定从i-1转移,所以g要开两个)

2>a[i]==b[j] f[i][j]=max{f[i-1][k]}+1,g[i][j][0]=i-1,g[i][j][1]=k;

k其实不用枚举,因为在枚举j的时候把合法的f[i-1][j]加入集合即可。

复杂度 $ O(nm) $

(✿◕‿◕✿)

 

 

 

原文地址:https://www.cnblogs.com/AthosD/p/11624569.html