2025.6

  • 2025/6/24

    上午学习树形dp。完成 CF429A,P2014,P2016,T219819。

    T219819 求经过指定点的树的最长路径,换根时需要记录父亲子树的最长路径。换根是先定一个根遍历,过程中计算当前节点为根的情况。在这题中先处理定根情况下每个节点往不同儿子走的最长和次长路径,再递推计算父亲子树里的最长路径,三条路径里取两条长的计算答案。

    P2016 当前点标记的状态能由儿子标记或不标记转移来,当前点未标记只能由儿子标记转移。

    下午写 abc411。D 题暴力模拟会超时,需要优化直接复制的部分。将每个串看作独立的点,用边表示前后相接的关系。就是一些树,每个节点都是操作 2 中的一个小串,他们之间的连接关系也是操作 2 给出的。操作 13 是在改变每个 PC 或服务器在这些树上对应的位置。所以每个整体的串都会是这些树上由根节点往下走的一条路径。这题规定这条路径的结尾是服务器,那么就从服务器往上搜。跟字典树很类似。

  • 2025/6/25

    学习字典树,完成 P8306,CF1792D,CF1902E,CF455B。

    CF1902E 在计算答案时可以计算前后 cnt 的差值,也就是当前长度的串的个数,再乘当前长度计算出要减去的数。也可以从走一步使得还没有被走完的串长度各减一方面考虑,那么每一步减去的就是当前点的 cnt。如果横坐标是串长度,纵坐标是串个数,那第一种方法就相当于横向的一块块计算,第二种方法就是一列列计算。

    CF455B 需要注意他们可以故意输。分情况讨论,如果先手有必胜和必输策略,那么先手会一直输直到最后一局赢,所以先手胜。如果只有必胜策略,那他们会轮流赢;如果只有必输策略,那先手会一直输。需要用两个数组记录一个人在某个点考虑下一步,是否有必胜或必输策略。

  • 2025/6/26

    上午学习字典树,完成 CF965E,CF1083B,AT_abc353_e。

    CF965E 先建立 trie 树,问题转换成把树上的点尽可能往上移,贪心策略是如果当前节点为空就把该子树中目前最深的节点移到当前节点。用大根堆维护当前子树中的所有点的深度。知道怎么转换,没想到贪心策略。

    CF1083B 考虑把所有可能的串建成一个 trie 树,不同节点可以代表不同前缀。对于同一层,节点个数是长度相同的不同前缀个数,如果个数小于 k,那这些前缀都可以被计入答案。如果大于等于 k,那此后每一层都只能新产生 k 个前缀。所以计算每一层有多少节点,一般情况直接由上一层乘 2,如果有限制,那么只有两端也就是最大或最小的串可能不符合要求,减去即可。没有想到不同节点就是不同前缀,以及可以把前缀按长度分组来看。

    下午写 CF2014,前四题都比较顺利。

    E 题想了一段时间才想到要建两层图,在马的位置由第一层向第二层连边。途中因为算答案把两人花的时间相加而不是取较大值而废了点时间调,交上去后因为没开 longlong 错了,改完之后 MLE,发现是最短路剪枝的时候少写了一个等号。花了大概五十分钟。

    F 题有点卡住是因为没想清楚当前点最初的权值可以在最后加,转移时先做减的操作。

    G 写得有点久,本质上是模拟,处理两次收到牛奶中间的时间段。有三种情况,这批牛奶喝完这段时间还有剩的、不够这段时间喝、以及在中途过期了。如果不够喝,就与上一批来的放在一起,因为这些剩的牛奶要么自己单独被喝,要么就只能和之前的牛奶一起喝(不能跟后面的一起喝因为时间充足,有天数他就会尽可能喝),而且它肯定比之前的牛奶晚过期,所以把它当作之前的牛奶看没有问题。注意要特判当前牛奶还没喝就过期了。

    H 题排序后输出顺序不一样了,一开始没有注意到。目前是超时,还没改。

  • 2025/6/27

    上午学习字典树,完成 AT_abc403_e。这题调了很久,有个诡异的问题。就是插入 x 时会标记结尾,表示这个节点的子树都没用了,同时把这个节点的权值改为 0,但也之后会有到达这里的串使得 cnt 不为 0。这些后来的串同样不合法,所以每次都需要刷成 0。也就是这个节点的 cnt 不总是 0,但 b 总是 1。所以把 sum 赋值为 cnt 再判断如果 b 为 0 就加儿子否则不加是错的。

    下午写 CF2008。

    A 7分钟左右,一开始想直接算出来但是没写对;B 12、3分钟,有一些莫名其妙的错;C 7分钟;D 22分钟。超时。后面想到互相能走到的形成很多环,用并查集维护;E 50分钟。没想清楚把原本奇偶性看作不变的,如果删一个,后半部分的偶数位就是之前的奇数位。对于后半部分每种字符在奇偶位上的出现次数,由一个个减去前面的实现;F 没想多久,最后一直因为爆 longlong 的问题 wa。取模在乘法后,然而还是爆了,说明在取模前就爆了,所以传参的时候要先取模。

    晚上写了 G。因为需要使 mex 最大,所以希望数尽量小。通过相减的操作联想到辗转相除,所以它们互相相减能得到的最小的数就是他们的 gcd,也就是两两数间的最小差值。所以 gcd 的倍数都可以得到。为了 mex 最大,原数组会变成 0、gcd、2gcd、3gcd...再根据 k 计算答案。

  • 2025/6/28

    上午学习启发式合并,完成 AT_abc372_e,P3201。

    AT_abc372_e,RE 调了一会,发现是数据范围看错题了。然后 T 了,也是调了一段时间,结果是没累加 sz 数组。

    P3201 wa 了很久,在合并前要判断集合是否已经被合并到别的地方去了。把同种颜色用类似链表的东西记录,合并时启发式合并。

    下午写 CF2000。

    A 4分钟;B 6分钟;C 11分钟,注意标记字母对应的数字初始化不能为 0,因为 \(a_i\) 可以为 0;D 18分钟,写第一遍的时候没想清楚可以重叠;E 33分钟。

    F 将近 50 分钟,注意不一定都是按同一个方向画的,也可以横纵交错;以及如果最后只剩一个格子,画完之后会产生 2 的贡献,因为它会影响一行和一列被填满;在预处理 s[i].z[j] 时,第二维的大小可能不止 k,因为这个 RE 过,开大数组或者不记录大于 k 的部分都可以,但是这题其实没办法准确知道要开多大,所以最好还是写不记录大于 k 的;还有在初始化 s[i].z 的时候 +k+1 写成 +n+1 了。

  • 2025/6/30

    上午学习启发式合并,完成 CF1899G。没有想到要把编号和下标转换,注意互换后起点变为 \(p_i\)。然后在找最大的儿子时把儿子的编号写成父亲的了,导致 MLE,调了好久。

    下午完成 CF2000G、CF2008H。

    CF2000G,注意还可以在车站开会,还有一种在会开始时到达车站的情况。

    CF2008H,看到题目需要想到取模和预处理。枚举 x,然后二分 m 也就是中位数,符合要求的数字都在 kx 到 kx+m 区间里,如果这些数字的个数超过了一半,那么 m 就有可能成为答案。

    晚上完成 CF1923E,并没有完成 CF2000H。这题用 set 维护空段,加点就是把一个长段分成两段,删点就是把两个段并成一段。再把同一长度的空段的左端点统一存在一个 set 里,查询时用树状数组查询。如果没找到就是在最后一段。不过还没改出来。

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