2021国庆假期 HZ杂题选讲
HDU7110 Shooting Bricks
题目传送门
容易想到一个错误的\(DP\),\(dp_{i,j}\)表示前\(i\)列,还剩余\(j\)次的最大得分。
但这样设计就面临一个问题,如果剩余次数为0,而现在打的这一列还有一些有奖励的,此时就可以从之前的列中借一次机会先打这一列会更优。但注意只能从以非奖励砖块结束的列借次数。
所以正确的\(DP\)状态是,\(dp_{i,j,0/1}\)表示前\(i\)列,还剩余\(j\)次,之前是否出现过以非奖励砖块结束的列的最大得分,转移显然。时间复杂度\(\mathcal O(nk)\)。
Submission
HDU7107 GCD on Sequence
题目传送门
当区间的\(r\)固定时,当\(l\)向右移动时\(v(l,r)\)只会变小,考虑维护当前每一个\(r\)最小的\(l\),在从大往小枚举时,每次将其倍数提出来,更新每一个\(l\),线段树维护即可。
Submission
ICPC2021网络赛II L Euler Function
题目传送门
从线性筛欧拉函数的角度想,考虑每个质因子的贡献。先对\(w\)质因数分解,若\(p|x\),则\(x^\prime=x\times p\),否则\(x^\prime=x\times (p-1)\)。考虑均摊复杂度的线段树,当一个区间内全部都是\(p\)的倍数时,直接对整个区间\(\times p\),否则就递归下去修改,因为\(w\le 100\)所以最多只有25种不同的质因子,所以总时间复杂度不会超过\(\mathcal O(25n\log n)\)。
Submission
HDU6952 Puzzle loop
题目传送门
考虑每个格子是否在某一个红色环内,发现若此状态确定,那么围成红色环的方案也是确定的。所以设其为\(01\)变量,每一个格子都有一个方程,最后求解自由元的个数或判断无解即可。此处需要注意,自由元的求法之前写的是错的,一定要看代码,知道正确的怎么写。
Submission
HDU6962 I love tree
题目传送门
树剖转化成序列上的问题,考虑一次在\(p\)位置向后添加\(x^2,(x+1)^2,\ldots\)会对位置\(i\)产生的影响,发现是\((x+i-p)^2\),将其展开得到\((x-p)^2+2i(x-p)+i^2\),由此发现只需维护每个位置的0次方、1次方、2次方的系数即可算出最终答案,树状数组维护即可。树剖时向上和向下对应到序列上是有所不同的,要分开考虑。
Submission
HDU6991 Increasing Subsequence
题目传送门
有显然的\(n^2\ DP\)做法,设\(dp_i\)表示以\(i\)结尾的级长上升子序列个数,\(i\)能从\(j\)转移当且仅当
\(j<i\)
\(a_j < a_i\)
\(\nexists k\in (j,i)\ \ a_j < a_k < a_i\)
考虑从小到大枚举数,记\(nxt_i\)表示当前第一个比\(i\)大的数的位置,则限制转化为
\(j < i\)
\(nxt_j>i\)
并且下一轮中\(nxt_j\)会被更新为\(i\)。发现是一个区间取\(\min\)操作,用吉老师线段树维护即可。
Submission
HDU6964 I love counting
题目传送门
首先发现转化成\(c\le a\bigoplus b\)肯定是错的,但可以考虑它们从高往低在哪一位变得不同了,设\(c\)和\(a\bigoplus b\)在前\(p-1\)位是相同的,等价于\(c\bigoplus a\)在前\(p-1\)位与\(b\)相同,如果\(b\)第\(p\)位上是1,那么只要\(a\bigoplus c\)的第\(p\)位为0就说明\(c\bigoplus a\)在第\(p\)位时就小于\(b\)了,发现这恰好对应到了字典树上的一个子树。
而因为数的是不同的\(c\)的个数,所以还要用记录\(pre_i\)的套路转化成二维数点。具体的,在字典树每一个节点上都有添加的点和询问的矩形,总数是不超过\(n\log n\)的,所以直接在每个节点上用树状数组数点即可,复杂度\(n\log^2 n\)。
Submission

浙公网安备 33010602011771号