NOIP联考总结

2023.10.30

T1

给定n个物品,每个物品有\(a_i,b_i\)的价值,第一次取时价值为\(a_i\),第二次取时价值为\(b_i\),第三次取时价值为\(a_i\),再在往后就没价值,问取\(k=1\sim m\)次的最大价值为多少

首先肯定想到什么恰好取k个,可能有费用流模型,可能有凸性,可以闵可夫斯基和之类的

但是好像建不出费用流模型,也没有凸性,于是考虑挖掘性质,\(a_i,b_i,a_i\)的顺序,相当于有两种物品,一种体积为1,价值\(a_i\),另一种体积为2,价值为\(a_i+b_i\),发现不同的选择顺序都然后就可以背包做,

但是如何\(O(n\log n)\)解决呢?

我们考虑只有体积只有1或2的物品,可以反悔贪心,具体来说,记录三个堆,表示还没用的体积为1中最大的,还没用的体积为2中最大的,用过的体积为1中最小的,每次若用过的1最小+没用过的1最大<没用过的2最大,那么这个体积为1的就可以被反悔,否则就用体积为1中最大的

T2

给定\(S,T_0\)两个串\(|S|\le|T_0|\),接下来构造n个串,形如\(T_i=T_{a_{i,1}}+T_{a_{i,2}}+...+T_{a_{i,k}}+D_i\),满足\(a_{i,j}\le i\),k,a,D都给定,问\(S\)\(T_i\)中出现次数

首先考虑k=1怎么做?

每一个T都是形如另一个T加上D,于是我们只要处理T与D之间的贡献即可,考虑\(p_i\)表示\(T_i\)结尾位置的ksm指针,也就是后缀与S的前缀的最大相同个数,然后再遍历一边D,更新指针得到\(p_i\),每次p=len_s是增加答案

然后考虑\(k\ge1\)时,我们要额外处理T之间的贡献,但题目规定\(|S|\le|T_0|\),而且每个T的前缀一定是\(T_0\),所以对于\(p_i\)相同的T,它们的贡献是一样的,于是我们就预处理\(g_i\)表示\(p=i\)的贡献,就直接用s自己的border转移

T3

有一颗n层的满二叉树,有m个有标号小球随机放在一个节点上,问每层都有至少一个小球的方案数

首先如果我们知道每一层的小球个数\(a_i\),那么答案就是多重集排列,也就是

\[ANS=m!\prod \frac{2^{(i-1)a_i}}{a_i!} \]

所以发现只跟每一项只跟a有关,于是用类似背包的DP即可处理,\(O(nm^2)\)

然后我们发现DP的\(m^2\)可以卷积优化到\(m\log m\),然后就可以MTT,不过很考验常数的心态(mod 1e9+7)

但是我们还可以考虑优化掉i,因为我们只在意每一行取了几个,所以如果我们从\(f_i\)转移到\(f_{2i}\),就是\(f_{i,j}f_{i,k}2^{(i-1)k}\)转移到\(f_{2i,j+k}\)

有了\(+1\)\(\times2\)的转移,就可以类似快速幂一样解决这道题

然而有一档15分要求\(O(2^n\log m)\)

所以考虑反演,我们令\(f_s\)表示至少s没有小球的方案和,\(g_s\) 恰好s没有小球的方案,那么

\[f_s=\sum_{s\subseteq t}g_t=((2^n-1)-S)^m \]

\((2^n-1)-S\)相当于补集,反演一下

\[g_s=\sum_{s\subseteq t}(-1)^{popcount(t)}f_t\\g_0=\sum_s(-1)^{n-popcount(s)}s^m \]

2023.11.1

算是发挥的比较好的比赛,但是T3没有深度思考,T4的部分分也没打

T1

有个字符串s,每个位置有一个权值p,和\(m(m\le30)\)个匹配串t,每个匹配串有一个价值w和颜色cl,若匹配串再原串中有个颜色相同的匹配,贡献为p(匹配的开头)+w,问满足不同颜色之间距离最小为k的颜色安排中贡献和的最大值

首先考虑dp,设\(f_i\)表示以i结尾的串的最大贡献和,发现要枚举一个j和k,表示\([j,i]\)染颜色k,然后用kmp计算贡献,这样是\(O(n^2m)\)

我们发现转移是一段前缀,考虑用线段树优化一下转移,发现转移都形如\(f_{j-k-1}\)\([j,i]\),所以i每次变化就是一次前缀加,\(f_i\)就更新第\(i+k+1\)位,转移就是前缀最大值,于是建出m个线段树即可,时间复杂度\(O(nm\log n)\)

考场打挂了,\(f_i\)没更新第\(i+k+1\)位,而更新到了\(i+k\)

T2

线段树分治板题

T3

给定a,b,两个序列,每次可以交换a中两个不相同元素,要求交换恰好k次,问\(\sum|a_i-b_i|\)的最大值

考虑贪心,对于两组a,b,我们发现若相离,则答案可以变大,否则不变

于是就将区间的左右端点分别排序,取差值前k大,取到最优后不用取,就是答案

要特判一下只有两种区间且k=1的情况,因为这样如果相离答案会变小

T4

区间兔队线段树,有个关于maintain的细节,就是除了修改以外,其他的maintain不用修改单调栈,所以不用多一个log

2023.11.3

今天被T2卡了,T3打了一个以为能过的贪心,结果爆零

本来暴力打满可以200+,T2,T3都会,但都差了一点,思维能力和代码能力都还需加强

T1

最短路,然后在dag上乱搞

T2

求包含第x位的最大子段和,要求支持全局+x

首先发现有一个全局+非负数的部分分,考虑把题目转化为+非负数

就把每次全局+给累计起来,离线排序,然后减小原序列,就变成只全局+非负数

以下是考场思路:

包含x的最大子段和即使全部-最小前缀-最小后缀

就先考虑最小前缀(最小后缀直接倒过来即可)

我们先把前缀和算出来,题目就变成全局+等差数列,查询前缀最小值(KTT板???,但是不会)

所以我考虑把前缀和数组构建出的单调栈算出来,这样通过二分我们也能找到最值

考虑x变大时,单调栈的变化,手摸发现,单调栈只减不加,我们还能计算出每个元素在x等于几时会消失,所以我们用堆维护一下,即可维护这个单调栈

T3

有个二分图,左边第i个点连向右边\({l_i,r_i}\),定义好匹配为不存在两个匹配\((a,b),(c,d)\)满足\(a<c\& b>d\),求最大好匹配

首先考虑dp,设\(f_{i,j}\)表示左右分别匹配到i,j时的最大匹配,每次就是在\([l_i,r_i]\)更新,然后再跑前缀max

我们先把f给滚掉,仔细观察\(f_i\)\(f_{i-1}\)之间最多差1,所以考虑维护其差分数组

于是我们发现更新f的过程就是:在\(l_i\)处插入1,在\([r_i,n]\)找到第一个1,把它删除(没有就随便删除0),我们发现可以用平衡树维护

2023.11.4

今天切了T1,没有被太区分,但是部分分没这么打,T2的单峰没发现,T4没深度思考

T1

对于每一位单独算贡献,然后发现系数只有前3个不一样,直接递推

T2

给定一个先单调不下降再单调不上升的系数b,和一个限制\(x_i+x_{i+1}\le a_i\),求\(\sum b_ix_i\)最大值

首先可以发现一个显然的做法,设b的一个峰值位置为w,只要确定\(x_w\)的取值,就直接向两边贪心,即可算出最值

然后发现\(x_w\)的取值关于答案是单峰的,于是三分

T4

给定一个图(\(n\le18\)),每个边有一个颜色,每个节点又或没有居民(\(2^n\)种)

每次可以选择一个颜色cl,用\(w_{cl}\)的代价,让颜色为cl的边开通,令\(t_s\)为s的最少耗费时间,\(val_s\)表示\(t_s\)最小的前提下最小的代价

\(\sum popcount(s)t_s,\sum popcount(s)val_s\)

考虑一个s超集的答案一定不优于s的答案,所以我们直接倒过来跑一边状压DP,然后再卷回去即可

2023.11.6

没有挂分的一天,但是没有部分分,T3+T4有64+25分,但是T3没有大胆思考贪心结论,T4也没有想到网络流

T1

发现a的相对位置不会变,二分或者倒着做即可

T2

推式子,发现是二次函数,然后果断三分

T3

抽象题,给定树和若干特色链,问树上有多少条链(一共有\(n^2\)条)满足删去后,最大特色链覆盖数不变

首先\(n^3\),需要知道一个贪心,把链挂到lca处,然后贪心从下往上选

然后\(n^2\),考虑删链的要求等价于删点,于是\(n^2\)判断每个点是否能删,然后统计连通块的平方和

所以我们考虑如何快速处理每个点是否能删

先在以1为根跑一边贪心,发现已经被覆盖lca处一定不能删,然后其他地方则要满足存在一条链可以替代另一条才能删,先处理出每个lca出是否在某些特殊链上是唯一覆盖(这代表该lca能被代替),然后跑dfs,注意要求lca重合或该特殊链lca可以删,在该区域内,只有这些链的交集不能删

最后统计答案即可

T4

有n种花,每天第i中会被初始为\(s_i\)盆,每天(\(Q\le2e5\))会有\(m(m\le2e5)\)位常客,和\(k(\sum k\le1e6)\)位顾客,常客i会在\([l_i,r_i]\)中至多买\(a_i\)盆,顾客i每种花最多买\(a_i\)盆,一共最多买\(b_i\)

首先发现网络流部分分25,考场应该直接入手...

考虑一种比较自然的做法,先把常客的影响去掉,发现常客在买得越平均越好,形式化来说就是是s排序后的字典序最小,这里可以用可并堆实现(当然我用了启发式合并+priority_queue),然后就是常客每次买对顶,然后和次大值合并(保证复杂度),还要大力分讨。时间复杂度\(O(n\log^2n)\)

后面的部分考虑建出网络流,然后考虑化最大流为最小割

设割掉x个s,那么一定是最小的s个,而右半部分的答案就是\(\sum min((n-x)a_i,b_i)\)

然后猜测网络流有凸性(虽然好像没有,它只是上升+下降),所以三分x(把区间缩小到15,然后暴力做),然后时间复杂度\(O(\sum k\log n)\)

2023.11.8

比较有水平,前3题都a了,最后一题挂了10分,发挥不错

T1

bitset+换根

T2

背包

T3

快速幂思想+广义矩阵乘法

T4

给定一个序列a,每次给一个起始点s,和终点t,每次移动定义为从x到\([x+1,t]\)中前\(min(d,t-x)\)大的元素中位置最大的,求步数

先考虑一种正着做的暴力,用主席树维护,单次跳跃是log的,部分分60分,但实际上95-100???

正解:正着做要受限于结尾,所以考虑倒着做,首先重新定义一下问题:每次移动为从x到\([x+1,t]\)中前\(min(d,t-x)\)大的元素中的其中一个,求小步数

于是发现如果反过来,一个点的到达的点恰好为以其本身为右端点的区间,这里用二分+主席树可以处理

然后就考虑倍增,但是我们发现一律贪心到最左的点不一定最优,可以先到中间点,然后再往左,所以用线段树维护区间最值+倍增(不要打st表,会爆空间)

病假(回家腐四天)...

2023.11.13

T1

二次前缀和+状态优化DP

T2

调整法...

T3

先表出一个规律,然后求个式子:

\[&\sum_{i=1}^n2^{\omega(i)} \\=&\sum_{i=1}^n\sum_{d_1d_2=n}[\gcd(d_1,d_2)==1] \\=&\sum_{d_1d_2\le n}\sum_{k|gcd(d_1,d_2)}\mu(k) \\=&\sum_{k=1}^{\sqrt n}\mu(k)\sum_{xy\le\frac n{k^2}}1 \]

再优化:

\[&\sum_{xy\le n}1 \\=&2\sum_i^{\sqrt n}\frac ni-\sqrt n^2 \]

2023.11.14

T1

一个简单的dp技巧,枚举出每个集合大小,提前把算重的系数乘进去,然后可以卷

还有一种方法...

T2

一般,感受一下,构造一下

T3

对于每个点分别算贡献

2023.11.15

就切两题,但是T3本来可以想到网络流,然后再谈优化,没有做过类似题目,T4矩阵乘法有点细节没想到,10分部分分还打挂了

T1

简单构造一下,然后算答案即可

T2

原题:[CF1548E]Gregor and the Two Painters

T3

\(n(n\le3000)\)个国家,A,B,C三个参数,对于\(i<j\),存在一条有向边当且仅当满足一下任一条件:

  1. \(|a_i-a_j|=A\)
  2. \(a_i\times B=a_j\)\(a_j\times B=a_i\)
  3. \(a_i\equiv a_j(mod\ C )\)

问用k条不相交的链最多能覆盖多少个点

先考虑\(n^2\)建边怎么做?我先想到网络流做最小链覆盖,先把把点变成入点和出点,然后建二分图,答案就是n-最大匹配

但这题是k条链覆盖,怎么办?可以想到入点到出点的边加一个费用表示是否覆盖这个点,然后再全局限制流量k,跑费用流

那么如何优化建图呢?那更简单了,后缀优化即可

T4

有个无限大的格子图,每个格子每个时刻有p的概率下雨,初始\(p=\frac1k\),若下雨则\(p=\frac1k\),否则\(p=p+\frac1k\),给定一个移动路线(对应的时间为\(l\sim r,l\le r\le1e9,r-l\le10000\)),问淋雨的概率

先发现一下,移动路线的有用之处在哪?重复经过一个格子时,概率不是相互独立的,先考虑设\(f_{i,j,k}\)表示时刻i,在格子j(这一维其实不用表示出来),在上一次下雨在前k天,然后转移可以用矩乘

考虑如何快速处理,首先可以快速算出l-1时刻的f,这对于全部格子是一样,然后处理出\(a_i(i\le r-l)\)矩阵表示过i天的转移,然后对于每个格子的若干天转移,每次将\(f_{i,0}\)清零,表示不能下雨,最后一个统计答案\(\sum_{j=1}^{k-1} f_{i,j}\)

2023.11.16

切三题+8分,没有挂分,发挥还好

T1

从后往前找最大位数,然后再从前往后算答案

T2

打表找规律,发现要么是第一个是2,或第二个是1

T3

一道GSS2的弱化版,还是本人打的std

posted @ 2024-03-01 11:32  zhy_learn  阅读(2)  评论(0编辑  收藏  举报