2025.10

  • 2025/10/11

    A,20 / 70

    观察到了只要 \(a_i=a_{i+1}\)\(a_i=a_{i+2}\) 就能全刷成 \(a_i\)

    \(a_i\leq2\)(20): 很快想到只能全刷 \(1\) 或不刷。

    \(a_i\leq a_{i+1}\)(20):很快想到遇到能刷的就把后面都刷了,但因为少输出了 \(a_n\) 所以没分,没检查出来是因为造的样例全是 \(1\)\(2\)。(其实我感觉并不是全 \(12\),不知道为什么没看出来)

    \(n\leq 1000\)(30):按自己的方法模拟了一遍,大概是从前往后扫能刷的就往前面刷,再处理一些特殊情况比如两边相等但中间比两边小。过了大样例但目前还不知道是哪错了。

    正解的实现注意一些边界情况的处理。

    B,15 / 15

    赛时 15 分暴力,搜索 \(b\) 再校验。\(BC\) 题都是没时间了所以没继续想。

    改题的时候对于处理 (i - j) % 2 == 1 的情况卡了比较久。这种情况要选择两个 mid,保证两边的灯塔对称过去都不会到 \(i\) 或者 \(j\)

    C,10 / 10

    赛时 10 分暴力。

    D,0 / 0

  • 2025/10/13

    \(10/11\) \(AB\) → 100,\(C\) 还在写。

  • 2025/10/14

    A,100 / 100

    维护能到达的温度区间判断是否有交集即可,大概十分钟。

    B,40 / 40

    暴力加特殊性质。大概三十多分钟。写特殊性质的时候就大致知道正解怎么写了,不懂为啥没写。

    不懂为啥没 A。但现在还有个 RE 的问题没改对。

    实则是数据规模不一样。

    C,5 / ?

    选择性放弃,输出 \(-1\) 有 5 分。

    主要通过可以两秒不动这个性质想到分奇偶。同种状态下时间的奇偶性都是一样的,所以当机器人首次到达这个点,人在之后的所有时间到都可能碰到机器人。

    第一次交 RE 了,发现是重复到达的问题导致还原路径的时候在相同的两个点跳。注意人开始 \(bfs\) 的时候,一个点只能到一次,不管时间奇偶性。因为不管什么情况都不需要或不会再到一遍。

    D,50 / 50

    赛时写了 50 分暴力,\(n^2\) \(dp\),大概四十分钟。

    对于 \(a_i\) 全相等,从下往上算,可以根据 \(a\) 的正负情况确定 \(b\) 如何选取。注意处理叶子节点必须要选。

  • 2025/10/15

    \(10/14\) \(B\) → 100,\(D\) → 70;\(C\) → 90。

    补充了 14 号总结。

  • 2025/10/16

    A,100 / 100

    花了挺多时间。有一两处没判栈里有没有元素,费了点时间调。

    B,40 / 40

    暴力加特殊性质。赛时写了状压,但是其他部分很混乱,考虑两段衔接的时候想错了,所以写了很多没卵用的东西。

    C,30 / 30

    暴力。

    D,0 / 0

    没怎么看。


    \(10/16\) \(B\) → 100;但 \(10/14\) \(C\) 还是 90。

  • 2025/10/17

    \(10/14\) \(C\) → 100。

    这个 \(C\),因为没给点排序所以不能保证字典序最小,改了之后变成 95 分,错了第 15 个点。

    调了挺久,以为是限制求错了,但是跟 std 一样。

    最后发现是对于能不能走的判断错了。一开始认为限制 \(=d\) 时,只有当前时间 \(=d\) 的时候不能走。

    但其实机器人可以在到达之前折返,等人到的时候再来堵,所以这种情况下,人在限制之后的时间到也都会被堵。改了就过了。

  • 2025/10/18

    A,100 / 100

    二分答案加贪心。

    B,20 / 20

    暴力。赛时观察到如果一个数在某个组内的前后位置发生了变化,答案就会产生加一减一的变化。花了大部分时间思考特殊性质,但是对答案会变化的情况没想全,以为能通过简单的分讨讨出来。而且一直在算操作次数。

    除了一定是算增量,关键的是要从求操作次数转化到求被翻的牌的张数除以二。将权值放在 \(R\) 上统计,可以让思路和实现都变得简单。

    对于在同一次翻的一张或两张牌,就可以分为四种情况,再分别讨论增量。

    C,29 / 41

    还以为第二档能过。

    D,5 / 5

    看了眼,没什么能写的。

  • 2025/10/21

    A,100 / 100

    跟每次操作的数的奇偶性有关,发现是在和的基础上减就能写出来了。

    B,100 / 100

    贪心吧,二分优化选 \(a_i\) 的部分。

    C,30 / 40

    特殊性质因为没考虑第一个点一定得选错了。

    D,20 / 20

    知道是有个中间点,但是起手就只写了三方的,然后就十分懈怠。

  • 2025/10/23

    A,60 / 100

    看错题了我以为全都是一个字母也合法,这还能过全部样例啊。

    B,0 / 10

    赛时想写 \(r1、r2、r3、d=1\) 的特殊性质,可能想错了,主要也没样例。

    加上没看到 \(r1 \leq r2 \leq r3\),然后我其实以为可以同时装弹,额,自动装弹之类的。

    还有就是没想清楚其实不会跑很远再回来打,顶多移一个位置再回来解决掉这一关,非必要不需要折返。

    这个 \(dp\),转移什么的也很直接,分讨情况很少,应该要写出来。

    C,40 / 40

    暴力。

    \(nq\) 的不难想。从基础的 \(x、y=0\) 开始考虑起,可以看出前面能删的个数足够让 \(i\) 减到 \(a_i\) 它就肯定能删,只是被删的顺序会不一样,但这题不用管。

    D,20 / 20

    暴力。想写菊花图的部分分,但失败了。

    题意就是欧拉回路,还写过一模一样的题,😓。


    \(10/21\) \(C\) → 100:

    这个 \(C\) 一开始一直没改对是因为在纠结当前状态的答案算在哪段。但每段最大值是之前状态的答案,从这些状态中的最大值加 \(b\) 转移到当前状态,不应该把当前状态算进去。

    所以 \(d_i\) 就要在算 \(d_{i+1}\) 的时候算进上一段。

    从平方收集型里从后往前枚举的同时算 \(a\) 最小值就可以想到,\(a\) 最小值的变化是阶梯式的。所以有很多不必要的枚举,每一段实际上只用转移来一次。所以维护单调栈的同时维护每段的 \(dp\) 值的最大值,因为每段要加的 \(b\) 不一样,所以再维护一个前缀最大值,就能知道能转移过来的上一个状态的最大值。

    \(10/23\) \(A\) → 100。

    \(10/23\) \(B\) → 100:

    注意还可以在 \(n-1\) 处结束,就是直接用 \(r3\) 解决 \(n\)\(boss\),再回来处理 \(n-1\)。这种打法只会在最后可能用上,因为前面但凡要折返,打完 \(i\)\(boss\) 后从 \(i\)\(i+1\)\(d\) 是一定要加的,所以打 \(i+1\) 的时候不用 \(r3\) 肯定更小。最后可以不需要再从 \(n-1\)\(n\),所以在 \(n\)\(r3\) 可能会比走最后这次 \(d\) 小。

    \(10/23\) \(D\) → 100:

    需要回顾欧拉回路。

  • 2025/10/24

    abc247\(D\) → 100。

    abc247\(E\) → 100:

    能想到容斥。主要问题是对于固定的 \(x\)\(y\),求答案的方法太复杂了,因为我从一开始就想的是知道一段的长度之后再一起算,也没想着换种方法,所以老是写错。

    而且容斥部分我最初是全一遍算完,所以代码冗长混乱。

    算答案的部分每次对枚举到的右端点,加上合法的左端点就行了。容斥部分不要写一起,写成函数就十分清晰。

    abc247\(F\) → 100:

    能想到建图,吗。不能。

    将正反两面的数字连边后,发现会形成一个个环。所以现在就变成了对于每个环选边的问题,再把每个环的方案数相乘。

    可以发现每个环选边的方案数只跟环大小有关。没什么思绪,于是就开始观察大小为 \(1\)\(2\)\(3\) 等大小的环的方案数,找规律,然后就能发现一个规律。

    $P$1127 → 100:

    一道欧拉路径的题目。注意题面中说的 \(20\) 个字母是指个数,不是说只会出现前 \(20\) 个字母。

    因为本题要求每个单词都出现一次,所以需要以首位字母为点,单词为边,去判断是否有欧拉路径以及具体路径。

    还有就是别忘记判连通,以及有向图里所有点入度都等于出度,就有欧拉回路,就有欧拉路径,不要判错了。

  • 2025/10/25

    A,100 / 100

    赛时对于第三个点有可能跟第一个点重复犹豫了一会,后面想清楚第一个点一定会在第二个点的邻点里存在,所以只需要用找到的点跟第一个点的大小关系判断是否需要向后再取一个就行了。

    B,30 / 30

    状压 30。感觉没什么思路,没想到建树,所以没有后续。

    C,30 / 30+?

    赛时想法是能换就换,不能直接换就借助另一个位置花三次换。次数小于等于 \(3*n\),子任务一应该会多几分吧,但是没有不知道咋算的。

    D,45 / 45

    先写了很暴力的暴力,发现可以预处理。因为把 \(l\)\(r\) 区间的答案放在 \(d_{l,r}\) 里的话,求 \(L\)\(R\) 所有子区间的答案的最大值就是求 \((L,R)\) 左下角的矩形里 \(d\) 的最大值。

    然后第三档,发现 \(k=0\) 时区间长度除了 \(1\) 都没必要取,所以就变成在 \([L,R]\) 里找最大的 \(a_i-b_i\),线段树维护最大值。


    \(10/25\) \(B\) → 100:

    首先想到建树,按顺序插点,找到最深分岔口插,实际上不用真建出来,只用加上多加的部分。也可以判断一个点是否在另一个点的子树里,分治把树建出来。

    CF788\(B\) → 100:

    虽然之前写过但跟没写过一样所以再写了一遍。

    把一条边拆成两个来看,问题变成删两条边还是欧拉图,再分类讨论。如果是两条连接不同点的边,它们一定接在同一点上;如果是一个自环一个边或者两个自环,随便哪两个都行。注意开 long long

  • 2025/10/27

    $P$3865 → 100:

    写了一下 \(ST\) 表板子,之前不太会用。

    CF2149\(E\) → 100:

    双指针。主要在于把包含 \(k\) 个不同数字转化成包含 \(k\) 个不同数字在右指针及之前最后出现的位置,没想到所以没什么思路。

    遇到这种问题,可以固定一个端点从而简单化。在右端点固定的情况下,左端点通过区间长度和 \(k\) 的限制向右移动。

    CF2149\(F\) → 100:

    CF2149\(G\)

    第一眼是莫队,然后非常尴尬的有点不会写。

  • 2025/10/28

    我真的有点破防。

    A,35 / 50

    思路从一开始就是由两个相邻数决定公差,然后向两边校验。想优化,就在思考怎么做一遍类似前缀后缀的事情从而知道当前点能向前或后延伸多少个,一直没有想出来。对于 \(n^2\) 怎么还写错了,我好像是忘记管 \(w\) 这个限制。

    考场上还花了一点时间意识到,公差确定的时候,不会有一个数字属于两个等差数列。总觉得有用但是一直没用上。

    为什么不能想到确定首项跟公差,非要从中间往外算,没招了。

    要关注 \(w\) 这个限制,就说明公差的范围会更小,分析复杂度。然后对于不知道的信息,比如公差,没有思路的时候就从枚举想起。接着把问题反着看,不一定要由一个固定的数推出整个数列。由于每个数只会对应一个首项,所以就能用首项分组。

    注意 \([1,w]\) 的限制不要忘记判,多判几次,没必要也没事总比错了好。

    所以为啥现在又变成 95 分了。发现把 \(ans\) 的初始值设成 \(n\) 就过了,很奇怪啊,按道理来说答案不会超过 \(n-1\) 吧。

    B,0 / 0

    考场上完全没有思路,感觉删边的操作不好写、连通块分裂的顺序和个数很受边的影响。唯一知道的就是最后留下的点都是单独的点。

    但其实要从简单了想,什么时候这个点不会被删,首先就是它所在连通块只有它一个点。并且通过之前唯一知道的那个东西就能知道,要留下来就要能达到单独的状态。

    那也就是周围的边都断了,就是邻点都比自己小。只需要关心邻点和自己被删的先后顺序,只要在所有邻点后删就可以留下。

    C,50 / 70

    这个是真想不到。赛时写了 \(n^3\) 暴力和特殊性质,都是 \(2\) 的幂次的部分错了。错误原因是突然忘记是不降而不是严格上升,导致我都输出的 \(-1\)。实际上应该是如果 i > 1 && a[i] == a[i + 1] && a[i - 1] != a[i] 答案就是 \(1\)

    要特别关注数列是不降的,非常重要,赛时轻视了这个条件。

    又可以发现此时要是相邻两个数最高位不一样,那么前面的那个数怎么合并都无法大于后面的。如果有三个数最高位一样,后两个合并会比第一个小。它们肯定挨在一起,答案就是一次操作。抽屉原理可知当 \(n\) 大于 \(60\) 就一定有三个数最高位一样,\(\leq 60\) 的部分暴力就行。

    D,50 / 50


    \(10/27\) \(A、B、C\) → 100

  • 2025/10/30

    感觉招了点什么东西。

    A,100 / 100

    \(a\)\(b\) 串搞混了,浪费了好久时间,九点四十才改对。

    B,8 / 36

    知道是看质因数个数,但我没想可以直接算出来阶乘里每个质因数的个数,所以我在枚举。至于为什么暴力错了我也不知道。

    写了暴力之后我也在尝试优化,但我想的是统计了一个数的质因数个数之后,把它的倍数也一起统计了。写得很复杂,而且还是过不了大样例就放弃了。

    明明应该要去尝试把阶乘看作整体,完全没有往那方面想。更诡异的是我第一时间也没有把 \(a*(a-1)*...*b\) 转化成 \(\frac{b!}{(a-1)!}\),很诡异。

    C,60 / 40

    发现了是两堆数的和的最小差值,写了搜索。

    其实想到折半搜索了,但好像对折半搜索有了点误解吧。

    D,15 / 15

    前两档特殊性质。


    \(10/30\) \(B\) → 100:

    对于计算 \(y!\) 里面有多少个 \(x\),分层算,\(\left\lfloor \frac{y}{x} \right\rfloor + \left\lfloor \frac{y}{x^2} \right\rfloor+ ...\) 就是答案。

    \(10/30\) \(D\) → 100:

    \(10/30\) \(C\) → 100:

posted @ 2025-10-11 17:08  tanxll  阅读(13)  评论(0)    收藏  举报
//雪花飘落效果