01.17
T1
比较容易想到线段树,但做法过于麻烦,需要讨论过多的参数,导致写挂了。
具体来说,对于每个区间,维护总区间值,区间左端点,区间右端点,从左端点开始的最大区间值和左右端点,以右端点结尾的最大区间值和左右端点,以及不与左右端点相交的最大区间值及左右端点。更新的时候注意字典序即可。
T2
考虑树剖,具体做法还未理解彻底。
赛时是倍增求出 \(\mathrm{lca}\) 然后直接跑路径。
T3
最大值最小,显然二分。用 \(\mathrm{dp}\) 来维护
另外的做法是用后缀数组,将所有后缀排序后,选取连续的一段字符。
T4
\(\mathrm{dp}\) 套 \(\mathrm{dp}\),设 \(f_{i,j}\) 表示经典的匹配,注意到对于相同的 \(i\),\(f_{i,j}\) 都是相同的,且对后面的影响是一样的。
另外 \(f_{i,j}\) 是不下降的,且与 \(f_{i,j+1}\) 最多差 1。于是可以将 \(f_{i,j}\) 差分然后压缩。
设 \(F_{i,s}\) 表示 b 串枚举到第 \(i\) 位,\(s\) 为压缩后 \(f_{i,j}\) 的状态,值为方案数。
每次转移枚举当前位选什么,计算新的 \(s\)。
01.18
T1
容易发现跟垂直平分线有关。
枚举三个点,求出垂直平分线的交点,再根据是否在多边形内判断、取点、求距离。
当然由于是最小值最大也可以进行二分,二分完后分类讨论判断是否合法。
T2
注意到显然的性质:第一个和第二个之间的高度差一定是最大的。
题目保证最后的答案小于等于 \(1e5\),那么可以预处理出这 \(1e5\) 中所有块的高度为多少(形如 \(ax+by\))。
然后可以枚举前面两块之间的高度,求出答案,注意精度。
T3
将移动看成空降,题目转换成带通配符的字符串匹配,推式子,用 \(\mathrm{FFT/NTT}\) 优化。
回到题目,可以用同样的方法进行二维的匹配,但也可以将二维变成一维来匹配。
处理移动是类似的问题,同样使用 \(\mathrm{FFT/NTT}\) 优化卷积即可。
T4
一种方法是用类似莫队的做法,令一种是分块套分块然后再转换,没听懂……
01.19
今天滚去做 A 组了。
比赛只做了一题,没有注意到第 4 题的 \(\mathrm{dp}\) 其实很好写,因为做完 T1 就在搞 T2,但一直没弄出来。
策略还是有问题的。
T1
注意到 \(n\) 只有 20,可以状压,先预处理出砍掉某条边后哪些边会消失,可以枚举每条边然后 \(\mathrm{dfs}\)。
预处理完后记忆化搜索,设 \(f_{s,i}\) 表示树的状态为 \(s\),当前是 \(i\) 走。转移就是枚举边,求出新的 \(s\),然后搜索。
T2
想到跟直线有一定关系,但关注点在角度上,而不是在左右侧。
可以求出 A 点到每个点的向量,由于 A 点在多边形内部,因此肯定在向量的左侧,所以我们只需要求出每条边左侧点的数量,找到最小值即为答案。
T3
看到输入顿时不想做,也没有进一步的想(也没有时间去想)。
其实弄出每个怪物对应的剑术和法术,连一条流量为 \(\mathrm{inf}\) 的边,题目转换成求点集的最小覆盖,跑最大流即可。
T4
数据不大,可以设高维 \(\mathrm{dp}\),根据题目的条件暴力转移。
暴力 \(\mathrm{dp}\) 是 \(\mathcal O(n^6)\) 的,但我们发现如果一行里有一个被转移到了,那么后面的其实是无效的,因为接下来的都可以由这一行第一个被转移到的点去转移,因此可以直接退出,时间复杂度降为 \(\mathcal O(n^5)\)(当然如果要卡应该也是能卡的)。
当然也可以调整一下设的状态,提前预处理出可以到达的点,降低时间复杂度。
01.20
T1
一开始想过网络流,后面再看了遍题目,题目的限制提示我们通过的港口是单调的,因此可以考虑 \(\mathrm{dp}\)。
由于左右两边之间没有过多的联系,因此两边各设 \(f_i\) 表示到了第 \(i\) 个港口的最大收益。
预处理边,将边升序排序,枚举左边港口 \(i\),升序枚举能到右边的港口 \(k\)。直接转移,注意储存一些更改过的量。
T2
很容易想到网络流,但是题目中 \(d\) 的限制一直没有什么好的思路,就放在一边。
发现如果我们枚举答案,可以推出 0/1 的最大限制流量,从而新增节点来满足条件。
T3
将一段区间更改的操作容易想到线段树,但这种修改一部分不修改一部分的没有什么好的方法,想过吉司机线段树但不会打。
其实可以直接暴力修改,因为每个点最多被修改一次,时间复杂度均摊是 \(\mathcal O(n)\) 的。
T4
没有想到性质,写了个暴力,在尝试拿到 30 分但失败了。
正解是 \(\mathrm{dp}\),由于两个矩形的横坐标要么相离要么包含,可以分情况讨论。
01.21
T1
数据很小,很明显使用的是搜索。一开始直接用一种特别暴力的搜索,虽然过了样例,但是连 \(3 \times 3\) 的数据都过不去。
后来发现由于颜色只有 3 种,可以 3 进制压缩存图,然后 \(\mathrm{BFS}\),同时改变的时候用一些奇奇怪怪的做法可以做到 \(\mathcal O(1)\),总的时间复杂度为 \(\mathcal O(3^{n\times m}nm)\),只能拿到 50分。
其实正解就是在这个基础上双向搜索,可以降低时间,这种方法十分适用于起始状态、结束状态和操作都给出,并且数据不大的情况下,可以有效的节约时间。
T2
看到最大值最小,想了想二分,但二分完后不好 \(\mathrm{dp}\) 判断,而且会有后效性。就想了想什么没有后效性的做法。
看到题目中一个条件:没有两栋楼高度相同,就想到如果按照高度的顺序来 \(\mathrm{dp}\) 应该就没有后效性。进而想到以区间最大值为根建树,然后做树形 \(\mathrm{dp}\)。
T3
做前面两题的时间花了有点久,导致这题都没有时间来做,但其实非常简单。
数据不大,一种朴素的想法是直接暴力,加上一些优化。
另外一种想法是区间 \(\mathrm{dp}\),由于操作都是在区间进行,因此可以用区间 \(\mathrm{dp}\),注意先乘后加。
T4
一开始没弄懂什么是:“最多只有一种路线可以回到该点”,其实指的就是每个点最多只会在一个环上。因此我们可以用 \(\mathrm{tarjan}\) 缩点,然后 \(\mathrm{dp}\)。
01.22
T1
\(n\) 很大,但用来构造数据的 \(m\) 很小,提示我们 \(n\) 可能只用来吓唬的。模拟了几组数据发现生成出来的序列是在 \(-m\sim m\) 的范围的,并且是有周期的。并且一个周期的总和是小于 0 的(至少我弄的几组数据是这样的),所以可以认为,最后答案一定不会超过两个周期。
因此可以将 \(n\) 降下来,然后暴力做即可。
T2
这题跟昨天那题一样,数据不大,初始和结束状态都给出了,因此可以使用双向搜索。
但今天的没办法压缩建图,所以我们直接用 \(\mathrm{map}\) 来存图。
T3
这一类选了一种不能选另一种,每种有各自的价值的,一般都是最小割,但我的建图有点麻烦,最后还是优化了一下才过去的。
具体来说,我们从 \(S\) 向每个区域连一条流量为商业区价值的边,每个区域向 \(T\) 连一条流量为工业区价值的边。对于共同收益,再新增节点,分别表示共同选商业区和工业区的收益。
T4
本来想过暴力,但 \(n\le 10000\) 让暴力都过不去。
发现影响每个矩形的都只有最靠近它的,所以我们用线段树找出最靠近它的矩形的 \(x\) 值,更新一下,然后作为答案。
01.23
这几天忙到忘了写总结。
T1
签到题。题目已经说了没有相交的边,那可以直接 \(\mathcal O(n)\) 暴力即可。
T2
考场时想着建两棵线段树,但是没有想到怎么处理哪些点属于哪个线段树,后来想到删除点相当于覆盖,因此我们可以离线做。
从后面开始往前弄矩形,先用二分弄出覆盖的点的区间,然后区间修改,最后对于每个点,找一下 \(x\) 轴和 \(y\) 轴的标记中更小的那个就是最后被哪个矩形覆盖,给那个矩形的答案加一,最后再顺序输出每个矩形的答案就可以了。
T3
题目很简明,但没有什么思路,于是打了暴力,但打完删除后就去测了样例,忘记自己没有将删除的边加回去,成功爆 0。
正解有很多种,可以圆方树,也可以 \(tarjan\) 求割点和桥,我则是用了分类讨论,对于两种查询,分别分包含和不包含两种情况,然后对应的找出判断条件。
T4
\(n\) 不大,直接暴力 \(\mathcal O(n!)\),但只能拿到 30 分,正解是对暴力进行优化,答案可行性优化,按照入度排序,二进制记录状态,估价函数,通过这些东西再加上常数优化即可得到满分。
01.26
明天就是冬令营了。
T1
砝码可以放左、右,也可以不放,所以总共是 3 种情况。直接暴力是 \(\mathcal O(m3^n)\) 的,过不去。
优化,但没想到 meet in middle。其实可以搜索前面一半,后面一半,然后指针扫描即可。
T2
\(\mathcal O(n^2)\) 的预处理很简单,所以 \(n\le 10000\) 也就很容易拿到。
这种一个输入对应一个答案的,有可能是结论题,可以通过推式子来得出结论。
\(x+y\le S\) 其实相当于我们求出 \(x+y=S\) 的情况,然后前缀和就好了。
结论:设 \(f_s\) 表示 \(s\) 的答案,则 \(f_s=p-1\)(\(p^2\) 为 \(s\) 因子中最大的完全平方数因子)。
T3
好吧其实没弄懂题意。
主要是我不相信除了重边外只有 4 种路径,就一直以为自己的想法是错的,其实没错。正解是分类讨论,搜索或者树状数组。
T4
读懂题但没有什么思路,连暴力都不清楚怎么实现。总而言之就是在划水。