• 01.17~01.27 总结


    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

    读懂题但没有什么思路,连暴力都不清楚怎么实现。总而言之就是在划水。

  • 相关阅读:
    hdu 1280 排序水题
    hdu 3336 KMP+DP (仍不懂)
    懂点PS技巧,你会减少很多痛苦
    ajax返回值中有回车换行、空格的解决方法分享
    windows7系统下让所有文件夹都使用同一种视图的方法
    LINUX常用命令大全归纳篇
    js 运算符
    获取修改父页面元素
    while跟do...while的用法
    jQuery取得select选择的文本与值
  • 原文地址:https://www.cnblogs.com/Livingston/p/15830523.html
Copyright © 2020-2023  润新知