错题集

主要记录模拟赛错题

要查找某一天的记录,Ctrl+F 即可。

每次考试前看一遍!!!


P1722 矩阵 II #tag:8-10 下午测试 401

  • 错误思路:brute-force。

  • 正确思路:dp,令 \(dp_{i,j}\) 表示以 \(i\) 结尾放了 \(j\) 个红色算筹的方案数,初始 \(dp_{0,0}=1\),答案 \(dp_{2n,n}\)(因为最后红、黑色要一样多),转移 \(dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}\)\(i \in [1,2n],j \in [\lceil \frac{i}{2} \rceil,i]\)),因为红色算筹要比黑色多。

  • 错误原因:一看到题就不自觉地往爆搜、模拟这方面想,没有牢记“求方案数又不输出方案,考虑 dp”。


P6188 [NOI Online #1 入门组] 文具订购 #tag:8-10 下午测试 401

  • 错误思路:枚举 \(a,b,c\),选最优方案。由于计算 \(c\) 时会有浮点数误差,导致 WA。

  • 正确思路:从大到小枚举成套数(共 \(\frac{n}{14}\) 套)。要求物品总数尽可能大,则尽量多买笔记本。若余数为 \(0\),直接加上能买的数量即可;若余数为 \(1\),退掉一本笔记本换一支笔即可;若余数为 \(2\),退掉两本笔记本换一支圆珠笔即可。

  • 错误原因:没有考虑浮点数误差,也没有思考更简易的枚举方式。

  • 总结:

    • 尽量不要用到浮点数参与运算,能化成整数的就化成整数。

    • 要训练自己往简洁的方式想。

    • 当某题情况较少时,直接分讨。


P2678 [NOIP2015 提高组] 跳石头 #tag:8-10 下午测试 401

错误思路:二分,check 时只检查了相邻两块石头的距离是否小于 \(x\),是就移走当前石头。

正确思路:有可能移走当前石头后距离仍小于 \(x\),这时需要接着移。

错误原因:做过的题没有重复巩固。check 思路没有理清。以后记得在草稿上写好再敲代码。


P2040 打开所有的灯 #tag:8-10 下午测试 401

错误思路:dfs,没有标记。

正确思路:应当标记每个点,因为一个点只能开关至多一次,再多了就无效。

错误原因:没有想清楚所有要点就开写。


P2029 跳舞 #tag:8-10 下午测试 401

错误思路 / 原因:没写。

正确思路:dp,令 \(dp_{i,j}\) 表示以 \(i\) 结尾跳了 \(j\) 步的最大收益,初始 \(dp_{i,0}=dp_{i-1,0}-s_i\),答案 \(\max\{dp_{n,i}\}\),转移 \(dp_{i,j}=\max(dp_{i-1,j-1}+s_i,dp_{i-1,j}-s_i)\),当 \(j \bmod t=0\) 时,\(dp_{i,j}=\max(dp_{i-1,j-1}+s_i+b_i)\)

总结:求最大收益又不输出方案,考虑 dp,要敢想、敢写 dp。


B3626 跳跃机器人 #tag:8-17 下午测试 401

错误思路:dp,但题目有后效性。

正确思路:bfs。

总结:想 dp,先要考虑先决条件:是否有后效性 / 最优子结构。


B3618 寻找团伙 #tag:8-17 下午测试 401

错误思路:dfs,但写得过于复杂导致莫名错误。

正确思路:dfs,将每个人的能力表示为二进制数,则权重之和即为所有人的异或和。

总结:

  • 看到二次幂,想到二进制表示。

  • 看到奇为 \(0\),偶为 \(1\),想到异或。

  • 还是要训练自己不断往简洁的方面想。


P3612 [USACO17JAN] Secret Cow Code S #tag:8-17 下午测试 401

错误思路:brute-force。

正确思路:因为字符串每次都是复制出来的,所以第 \(n\) 个字符一定能对应到第一个字符串的某个字符。于是递归分段处理(实现不能用真的递归,常数会很大),\(n<\frac{len}{2}\) 直接继续,\(n>\frac{n}{2}\) 则判断是否为第一个字符,若是则 \(n=\frac{len}{2}\),否则 \(n=n-\frac{len}{2}-1\)\(n\) 表示当前下标,\(len\) 表示当前长度)。

总结:

  • 处理字符串复制的题目,考虑递归分段处理。

  • 实现时不能用递归,常数很大。


P2072 宗教问题 #tag:8-17 下午测试 401

错误思路:没写。

正确思路:dp,令 \(dp_i/f_i\) 表示以 \(i\) 结尾的最少集体数 / 最小危险值。初始 \(dp_0=f_0=0\) 其余 \(\infty\)。转移 \(dp_i=\min(dp_j+1,dp_i),f_i=\min(f_j+cnt,f_i)\)\(cnt\) 表示当前 \(i \sim j\) 的宗教种类数,转移时顺便维护即可),注意 \(j\) 需要倒序 \(i \to 1\) 枚举,因为正序枚举可能没到 \(i\)\(cnt\) 就大于 \(k\) 了,从而没有转移。答案:\(dp_n,f_n\)

总结:

  • 最值问题想 dp。

  • 注意诸如循环顺序这种细节。


P1326 足球 #tag:8-17 下午测试 401

错误思路:没写。

正确思路:结论题。要求赢的分最大,则只可能输一场或不输(不输要满足 \(s \ge t\)),输的分最大同理,也只能赢一场或不赢(不赢要满足 \(t \ge s\)),分讨即可,具体见代码。

总结:看到 \(10^9\) 数据范围,考虑是不是结论题。


P2207 Photo #tag:8-17 下午测试 401

错误思路:没写。

正确思路:我们可以把问题想像成拍了一张 \(1 \sim n\) 区间的照片,再在中间分割,求分割的最小次数,这便转化为了区间选点问题。对于每个分割点,我都想使其被更多的区间包含,这样分割点会更少。于是我们将区间按右端点从小到大排序,每次选右端点前面那个即可(不能选右端点不然分了等于没分)。

总结:学到了区间选点模型,以后看到区间问题可以尝试将其转化为此模型。


P4379 [USACO18OPEN] Lemonade Line S #tag:8-18 下午测试 401

错误思路:没写。

正确思路:贪心,将每头牛按 \(a_i\) 从大到小排序,依次放置奶牛到队列即可。从大到小排序是因为 \(a_i\) 更大的奶牛更容易进队,从而使后面 \(a_i\) 小的奶牛更不容易进队,使得队列牛数更小。

总结:

  • 求最值问题,考虑 dp 未果,或感觉比较神秘的,考虑贪心。

  • 考虑贪心,先考虑排序。


P3817 小A的糖果 #tag:8-18 下午测试 401

错误思路:对于每对 \(a_i,a_{i+1}\),若 \(a_i+a_{i+1}>x\),则对 \(a_{i+1}\) 进行操作。

错误原因:\(a_{i+1}\) 可能不够减,并且没开 long long

正确思路:\(a_{i+1}\) 不够减就减 \(a_i\)

总结:以后要仔细考虑特殊 / 边界情况,并多用边界数据进行测试。


P2772 寻找平面上的极大点 #tag:8-18 下午测试 401

错误思路:brute-force。

正确思路:按 \(x\) 为第一关键字,\(y\) 为第二关键字排序。对于每个点,只有它前面的点才有可能支配它,而他们的 \(x\) 一定大于当前点的 \(x\)。动态维护 \(y\) 最大值并比较即可。

总结:以两维作条件的题,可以固定一维,再处理另一维。


P1394 山上的国度 #tag:8-18 下午测试 401

错误思路:没写完。

正确思路:用并查集双向合并再判断所有点是否在一个集合即可。注意合并时只有 \(u\)\(v\) 的根可以流通,并不代表 \(u\) 的根与 \(v\) 的根也可以流通。

总结:并查集不能一味照板子写,要思考哪里变化了。其他算法也是。


P1395 会议 #tag:8-18 下午测试 401

错误思路:没有输出编号最小的。

正确思路:用 vector 记录重心并排序。

总结:审题很重要。


P2240 【深基12.例1】部分背包问题 #tag:8-19 下午测试 401

错误思路:贪心,但是排序时 cmp 写成了除法导致精度误差,并且没有判断最后是否满了就直接加。

正确思路:贪心,按性价比(即单位价格)排序即可。这是因为分割金币以后性价比不变,选性价比更高的一定更优。

总结:

  • 慎用除法、浮点数,避免精度误差!!!

  • 思路一定要先打好草稿!!!!!


P5650 基础字符串练习题 #tag:8-19 下午测试 401

错误思路:brute-force。

正确思路:\(1\) 转成 \(-1\)\(0\) 转成 \(1\),然后跑最大子段和。

总结:要牢记最大子段和的套路。


P6023 走路 #tag:8-19 下午测试 401

错误思路:没写。

正确思路:结论题。对于任意两天,设它们走的步数,已经获得的分数以及接下来每步可得的积分分别为 \(a_1,a_2,b_1,b_2,c_1,c_2\),不妨设 \(c_1 \ge c_2\),则显然我们有 \(b_1+a_2 \times c_1 \ge b_1+a_2 \times c_2 \ge b_1+b_2\)。(\(a_2 \times c_2 \ge b_2\) 是因为后面可能还有激励)。于是我们发现将所有步数放在一天走完即可达到最优。

总结:看到极大数据范围,考虑结论题。


P6014 [CSGRound3] 斗牛 #tag:8-19 下午测试 401

错误思路:brute-force。

正确思路:枚举两个数的余数,易得若存在 \(n-2\) 个数的和为 \(10\) 的倍数,则总点数之和一定与剩下两个数的和在模 \(k\) 意义下同余。根据这个判断即可,具体见代码。

总结:做题找数据范围小的地方入手(本题余数只有 \(1 \sim 10\))。


P2420 让我们异或吧 #tag:8-19 下午测试 401

错误思路:没写完。

正确思路:倍增维护树上前缀和即可(就是预处理 LCA 的部分顺便维护即可)。


B3828 [NICA #2] 优秀正整数 #tag:8-20 下午测试 401

错误思路:枚举 \(i\),判断 \(i \times i\) 是否为优秀正整数即可。

正确思路:同错误思路。

错误原因:取模次数太少。

总结:要取模的题,每一步都得取模


P1878 舞蹈课 #tag:8-20 下午测试 401

错误思路:没写。

正确思路:用小根堆维护每一对跳舞的人即可,具体实现细节见代码。

总结:想出 brute-force 之后,要思考哪部分可以优化,再选较容易优化的部分优化。如这题就是选绝对值最小的可以用小根堆维护。


P6092 [CEOI2012] 工作规划 #tag:8-20 下午测试 401

错误思路:没写。

正确思路:二分所需机器数,若没安排完且当前机器不会超时就安排上,否则取完成任务时间最靠前的机器做(前提是也不超时)即可,其中第二个过程可以用小根堆维护。

总结:二分 + 贪心 以及 小根堆优化 都是普及组模拟赛的参考点,必须牢记。


B3752 [信息与未来 2019] 新斐波那契数列 #tag:8-22 下午测试 401

错误思路:没写。

正确思路:发现所有新斐波那契数列里的数都可以表示为形如 \(k \times a+c\) 的表达式,然后又发现项数大约是 \(\log\) 级别的,于是枚举 \(n\),递推计算 \(k_i,c_i\),若当前 \(n\) 满足 \(k_n \times a+c_n=x\),则输出即可。

总结:\(10^9\) 数据范围,考虑数学结论!!!(找规律


P8669 [蓝桥杯 2018 省 B] 乘积最大 #tag:8-22 下午测试 401

错误思路:dp,但没有最优子结构。

正确思路:贪心,\(k\) 为偶数就两个两个选,每次看选两正数还是两负数哪个更大。为奇数时,若最大的一个是正数则直接选它,否则说明全是负数,每次选两个时要比较哪个更小(因为第一个数是负数)。

总结:

  • dp 要考虑先决条件。

  • dp 不行时就考虑贪心。


P1141 01迷宫 #tag:8-22 下午测试 401

错误思路:dfs 找联通块,但是看错题了,以为是 \(n \times m\) 的矩阵。

正确思路:同错误思路。

总结:审题!!!把题目条件列在草稿纸上。


P2700 逐个击破 #tag:8-22 下午测试 401

错误思路:对于每条连接敌对城市的边断掉。但是有可能存在比该边更小的边,断掉它以后两个敌对城市也不在一个联通块里了。这很容易 hack。

正确思路:容易发现将 \(k\) 个敌对城市不联通,需要断掉 \(k-1\) 条边。考虑将边按边权从小到大排序,依次考虑所有边并尝试断掉,同时使用并查集维护联通性。但是并查集不支持删除,于是正难则反,将边按边权从大到小排序,考虑加 \(n-k\) 条边即可。

总结:学到了正难则反思想。


B3694 数列离散化 #tag:8-23 下午测试 401

错误原因:没开 map

总结:考试一定要留出 \(15\) 分钟检查。


P2802 回家 #tag:8-23 下午测试 401

错误思路:纯 DFS。

正确思路:DFS + 剪枝,或 BFS。

总结:搜索尽量用 BFS,用 DFS 就一定得剪枝。


P2085 最小函数值 #tag:8-23 下午测试 401

错误思路:枚举 \(x\),每次取 \(F_i(x)\) 的最小值,但是这是错的,因为假设第一轮选了 \(F_3(1)\),但有可能存在 \(F_i(1)<F_3(2)\)\(i \neq 3\),因此不能直接跳过。

正确思路:用优先队列维护 \(F_i(x)\) 的最小值,每次弹出队头,并插入下一个即可。

总结:当觉得问题过于简单时,想一想是不是错了。


P1661 扩散 #tag:8-23 下午测试 401

错误思路:floyd,但是抄板子。

正确思路:floyd / 二分 + dsu。

总结:不能一味抄板子,要想想哪里要改动的。


P1658 购物 #tag:8-23 下午测试 401

错误思路:dp。

正确思路:贪心。

很容易发现我们第一个一定选 \(1\),如果连 \(1\) 都不选,那么 \(1\) 一定凑不出,于是无解。

接着手玩:

1 1 -> 1 2
1 2 -> 1 2 3
1 3 -> 1 3 4

我们发现,前两组都能凑出连续的数,到第三组就凑不出了。

这是因为 \(3>2\),因此 \(2\) 无法被凑出。

更一般的,我们发现,令 \(sum\) 表示目前序列长度,则若当前要添加的数 \(> sum+1\),则一定不行,否则一定可以。

继续,对于可行的数,它们对序列长度的贡献即为他们本身。

于是我们将 \(a[]\) 排序,每次从大到小枚举直到可行,然后添加之即可。

总结:dp 不行想贪心,贪心就要玩样例。


P1165 日志分析 #tag:8-24 下午测试 401

错误思路:优先队列 + 栈,待查错。

正确思路:维护 \(dp_i\) 表示栈顶编号 \(i\) 的最大值,每次 \(dp_i=\max(dp_{i-1},x)\)\(x\) 为插入的数)即可。

总结:对于普及组数据结构题,考虑维护前缀和 / 积 / 最值等等。


P1258 小车问题 #tag:8-24 下午测试 401

错误思路:推式子,但是推错了。

正确思路:二分第一个人坐车到的点,再计算两人分别到达目的地的时间,若第一个人时间 \(>\) 第二个人时间则它要坐少一会车,猜小,否则猜大即可。

总结:对于数学问题(特别是这种行程问题),一定要画图再推式子。如果推出来的式子太复杂,则要审视是否错了。


P2193 HXY和序列 #tag:8-24 下午测试 401

错误思路:dfs。

正确思路:dp,令 \(dp_{i,j}\) 表示以 \(i\) 结尾最后一个数选了 \(j\) 的方案数。初始:\(dp_{1,i}=1\),答案:\(dp_{n,i}\),转移:\(dp_{i,j}=dp_{i,j}+dp_{i-1,k}\)\(k\)\(j\) 的因数)。

总结:能 dfs 的,一般能 dp。求方案数,想 dp。


P3915 树的分解 #tag:8-24 下午测试 401

错误思路:没写。

正确思路:维护子树大小,等于 \(k\) 的就切掉,最后判断 \(siz_1\) 是否为 \(0\) 即可。

总结:要敢想敢写。感觉是对的就一定先写,不要犹豫。


P1589 泥泞路 #tag:8-25 下午测试 401

错误思路:模拟,若上次长度有余数则当前长度 \(-1\),若有重叠则减重叠部分。但是这一次的起点应该是上一次实际的终点(不一定是输入的,因为可能有余数),我没有记录。

正确思路:记录这个即可。

总结:这题有三种情况:全包含、有重叠、无重叠。写代码之前应当把这三种情况一一列举出来分别考虑,并且注意有余数、记录实际终点等细节。总之,要勤动笔,尤其是这种模拟题。


P3913 车的攻击 #tag:8-25 下午测试 401

错误思路:记录每行、列是否计算过,没有就加 \(n-1\),否则加 \(1\),但是有可能某个车的位置会算多次。

正确思路:整体思想,将行、列去重,得到总个数 \(x,y\),则答案即为 \((x+y) \times n-x \times y\)

总结:单独难以处理时,考虑整体处理。


P2694 接金币 #tag:8-25 下午测试 401

错误思路:没有考虑要等金币落下的情况。

正确思路:考虑即可。

总结:打草稿!


B3874 [GESP202309 六级] 小杨的握手问题 #tag:8-25 下午测试 401

错误思路:树状数组求正序对,但是没开 ll。

正确思路:开 ll 即可。

总结:逆序对开 ll!


P3884 [JLOI2009] 二叉树问题 #tag:8-25 下午测试 401

错误思路:求 LCA 写挂了,第一次跳的时候没有让 \(x,y\) 跳到同一层(即写成了 dep[dp[x][i]]>dep[y])。

正确思路:改成 >= 即可。

总结:LCA 板子背的不熟。还得背几遍。


P2782 友好城市 #tag:8-25 下午测试 401

错误思路:没写。

正确思路:\(O(n \log n)\) 求最长上升子序列的板子。维护 \(dp_i\) 表示以 \(i\) 结尾的最长上升子序列的最小末尾值,对于每个 \(i\),二分出最小的满足 \(dp_x < y_i\) 的最小 \(x\),其中 \(y_i\) 为北岸友好城市的坐标(因为 \(dp_x\) 单调递增,因此可以二分),尝试让 \(y_i\) 接在 \(dp_l\) 后面并更新最长上升子序列的长度即可。


P1464 Function #tag:9-25 下午测试 401

错误思路:对于读入结束的条件判断错误(写成了 a!=-1&&b!=-1&&c!=-1)。

总结:审题!!!以后防范此类错误的发生。


P1095 [NOIP2007 普及组] 守望者的逃离 #tag:9-25 下午测试 401

错误思路:没写。

正确思路:对于全用闪烁魔法的情况做一遍 dp,然后看是否能增加一些跑步来使行走的路程更长。

总结:对于这种有多种情况的 dp,可以先全使用一种,再在此基础上考虑另一种。


P1334 瑞瑞的木板 #tag:9-25 下午测试 401

错误思路:直接按木板长度从大到小排序,然后依次切割。

错误原因:不一定当前的木板就是最长的,有可能其余更小的木板拼成的长木板比当前木板更长。

正确思路:将合并果子的套路反过来就成了本题。

总结:合并果子的套路十分常见,以后遇到合并 / 拆分且价值 / 体力是两个元素的和的题,考虑这种套路。


P1363 幻象迷宫 #tag:9-25 下午测试 401

错误思路:搜索,若将地图内的点全走完就判定为合法。

错误原因:显然很容易被 hack。

正确思路:因为矩阵是重复的,所以考虑多带两个参数,即当前矩阵的编号 \((xx,yy)\),若能走到了一个点,它已经被走过且与上次到达的矩阵编号不同,说明它绕了一圈回到了原点,即为合法。

总结:想出了一个思路必须尝试证明,对于这种显然错误的思路就不要再尝试写出来了。


P1348 Couple number #tag:9-26 下午测试 401

错误思路:没写。

正确思路:

\[n=x^2-y^2=(x+y)(x-y) \]

\(x,y\) 奇偶性不相同时,\(x+y,x-y\) 都为奇,乘起来也为奇。

否则,\(x+y,x-y\) 都为偶,乘起来为 \(4\) 的倍数。

综上,当 \(n\) 为奇数或为 \(4\) 的倍数时,它就是 Couple number。

总结:对于这种式子要更敏感一些,然后尝试从奇偶性发现规律。再不行还可以打表。


P1403 [AHOI2005] 约数研究 #tag:9-26 下午测试 401

错误思路:写了一个若至状压 + 组合数学,因为时间复杂度分析错误,沦为与暴力老哥同分 /ll。

正确思路:容易发现每个数 \(i\)\(1 \sim n\) 中都有 \(\lfloor \frac{n}{i} \rfloor\) 个数能整除它,这便是 \(i\) 对于答案的贡献,累加即可。

总结:对于自己想出来的思路,要仔细验证正确性与时间复杂度。同时对于求和类题目,可以考虑换一种角度并采用算贡献思想。


P3737 [HAOI2014] 遥感监测 #tag:9-26 下午测试 401

错误思路:按横坐标排序,每次选取横坐标差值不超过 \(r\) 的点,取它们横坐标的中位数。

错误原因:横坐标差值不超过 \(r\) 不代表就能观测到,必须两点间距离不超过 \(r\)

正确思路:区间选点,求出每个点能被观测到的放置区间,按照右端点排序(为了保证接下来只要考虑上次选的点),每次若上次选的点不能覆盖当前区间就选右端点即可(因为最有可能覆盖之后的区间)。

总结:对于区间覆盖问题,一定要考虑区间选点模型!!!


P1404 平均数 #tag:9-26 下午测试 401

错误思路:暴力。

正确思路:因为若存在某个区间的平均数为 \(x\),则所有 \(\le x\) 的平均数都是合法的,存在单调性,考虑二分。若区间 \([l,r]\) 的平均数为 \(x\),则有 \(\frac{\sum^r_{i=l} a_i}{r-l+1} \ge x\),转化一下可得 \(\sum^r_{i=l} (a_i-x) \ge 0\),于是枚举 \(r\),动态维护前缀和 \(s_i\) 以及与 \(r\) 相隔至少 \(m\) 且最小的 \(s_{l-1}\)(维护最小的是为了让区间和最大),每次判断 \(s_r-\min\{s_{l-1}\} \ge 0\) 即可。

总结:关于平均数的题,考虑推式子以及二分。


P1385 密令 #tag:9-26 下午测试 401

错误思路:没写。

正确思路:首先求方案数考虑 dp。然后发现不好 dp,于是发掘性质,发现字典序总和不变。于是多带一维,令 \(dp_{i,j}\) 表示长度为 \(i\) 且字典序总和为 \(j\) 时的方案数。答案就是 \(dp_{n,all}\)\(all\) 为原字符串的字典序总和),初始状态就是 \(dp_{1,i}=1\)(长度为 \(1\) 时无法操作),转移就是 \(dp_{i,j}=dp_{i,j}+dp_{i-1,j-k}\)\(k\) 是其中一个字母的字典序)。

总结:求方案数考虑 dp!!!当不好 dp 时,尝试发掘性质,增加维度。


B3958 [GESP202403 四级] 相似字符串 #tag:9-27 下午测试 401

错误原因:认为 insert 是在后面插入,实则是在前面插入。

错误思路 & 正确思路:过于简单,略。

总结:记住这个函数的用法即可。


P2239 [NOIP2014 普及组] 螺旋矩阵 #tag:9-27 下午测试 401

错误思路:暴力,还打挂了。

正确思路:将整个矩阵分为 \(n\) 圈,对于每个圈单独处理,具体见代码。

总结:对于此类无法直接模拟的模拟题,考虑分段找规律。然后平时做题要多训练自己打部分分的能力。


P2009 跑步 #tag:9-27 下午测试 401

错误思路:没写。

正确思路:floyd 板子。

总结:每个题最多想 15 min,注意时间分配。


P10725 [GESP202406 八级] 最远点对 #tag:9-27 下午测试 401

错误思路:暴力,还打挂了。

正确思路:这个题目求的东西很像直径,于是我们效仿直径的求法,直接找出以最深黑点与以最深白点为端点的最长链,取最大值即可。

总结:LCA 板子要多打!!!然后要思考题目的本质是什么。

posted @ 2024-09-26 18:48  _XOFqwq  阅读(6)  评论(0编辑  收藏  举报