名字贼长的玩意练习记录

CF1582E 2000
这道题很明显,
我们设 dp 状态:设
初始设
CF761E 2000
这道题一言难尽。没看到
于是我们为了尽量让儿子不与父亲连向祖先的那条边重合,就每次向下连边就连长度为
无解条件就是
CF2044F 1900
消去第
记录所有的
CF474C 2000
枚举所有 4 种旋转的 256 种情况。对于每一种情况有 4 个点。判断这 4 个点能不能组成一个正方形。
具体地,先将这 4 个点以
CF1009E 2000
迫真 2000,个人觉得虚低了。
这道题算的是期望。因为一共
于是,可以将每一个
- 如果你直接从点 1 走过来,不休息,那么在第
步时就算上 的贡献。后面不管怎么选都可以。一共 种情况(以 为底数的原因是每一个位置有“休息”或“不休息”两种选择)。 - 如果不是直接从点 1 不休息地走过来,而是中间休息了一会再走过来,假设在位置
才将这种情况的答案加上 ,那么前面的 个位置和后面的 个位置你不管怎么选都可以。所以对于每一个 一共有 种情况。而 也有 种选法,就一共 种情况。
综合一下,最终答案就是
注意,当
1413E 2100
???你去跟上面那道题坐一桌。
注:每一次
容易发现,当
否则,设目前时刻为
那么,我们就要在
1360H 2100
简单模拟。记一个最开始的中位数
然后一次同时减去头、尾。分类讨论现在在
274D 2200
每一行其实是反映了所有
最后判断有无环,有环则无解。若无环,则跑拓扑,即可求得答案。
1555E 2100
你硬控我一个中午,直到我想出来了那个性质……
要判断可以从一个线段能够 travel 到另一个线段,其实不需要那么麻烦,只需要将每一个线段的右端点统统
然后首先将所有线段按照权值从小到大排序,然后你要维护一个
然后双指针维护最小的以
啊啊啊啊啊啊啊啊啊啊啊啊啊我要癫了!!!!!!
1970D 2100, 2600, 3100
这 3 道题,乱搞是正解(Tag 里面都标的是随机化)。所以我们要考虑如何乱搞才能把它搞对。
因为这里的
可以发现,有一种 XOXXXX...
的构造,同时实现上面两种条件。因为 X
和 O
的个数差距非常大,所以答案相同的概率非常低。(经过一个早自习的推导后,)两个长度为
然后就可以打
打表核心代码
1 | map<int, int> mp; |
765F 3100; 1793F 2600
这道题是 Algorithm-Duel 网站上的每日一题。据说这道题在洛谷上还有一道第三倍经验。黑题喜加一。
总而言之,题目大意就是给你一个序列,有
表面上是
我们设如果
假设我们现在已经定了
- 要让
不被 支配, 。 - 要让
不被 支配,那么 ,即 。
于是
那么具体怎么搜索呢?搞一个值域、动态开点线段树维护序列下标为
最后,类似二维偏序的,用树状数组维护即可。
406D 2200
这道题容易发现,每一个点的经过的路径都是一个上凸壳。所以可以让这些点从右往左遍历,随时维护上凸壳,将现在的点和栈顶连一条边,这样就会形成一棵由第
955D 2600
首先,可以先对整个串做一个 KMP。如果有匹配的,就找到一个包含该串的长度为
否则,就只能把这个串给拆开。枚举劈成两半的左边的长度
解决方案是:我们可以从左到右 KMP,设
然后就枚举,若合法则输出即可。
1467D 2200
我们可以预处理每一个点会被算多少次到答案里。这样就可以直接在线修改查询了。
最开始会设
但是这样会发现,可能会发现:因为是走
于是可以得到转移:
2072G Div.3 最新最热
这道题可惜了,如果想到拆式子,赛时就可以切掉这道题然后 AK 了。
首先,
其次,当
然后就可以普通分块做了。预处理
最后,当
同时,不要忘记判断
60D 2500
远古场 + 每日一题 + 联考出过类似的。
边长互质的三角形的通项公式,
因为所有的
1416C 2000
因为这道题出现了异或运算,所以可以尝试一位一位地考虑。
那么就可以先预处理出对于每一位的逆序对个数。具体地说,就是预处理出,如果两个数是一对逆序对,那么是哪一位决定了第一个数大于第二个数。这一位所决定的逆序对数之和。
这个就可以使用 01-Trie + DFS 来解决。在 DFS 的时候,每一个节点 insert
操作时,记录这个状态有哪些数遍历过(即记录一个编号集合)。所以,我们可以双指针扫,左指针遍历
然后,扫完之后,求出了这个节点所可以判出来的逆序对数。这也就是当
我们用一个
884D 2300
拆 开 是 不 好 想 的 所 以 要 把 思 维 逆 转 想 成 合 并。(ˉ▽ˉ;)…(我连这一步都没想出来
当
但是,有一个问题,就是当
所以,当
1148E 2300
首先,将
那么,满足有解的一个必要条件就是:
不仅如此,假如有向左移动的已经大于前面向右移动的和,那么也没有解。具体地说,设
现在有解了。我们维护一个栈,表示想要向右移动的石子的栈。
- 当
,不管。 - 当
,它就想要往右移动。然后就将其 push
进栈内。 - 否则,就要让他尽量匹配前面的想要往右移动的石子。一直匹配直到这个石子已经向左移动到了
为止。若想要往右移动的石子还有距离,那就再把它 push
到栈里面。
当一个答案被记录的时候,那么肯定就会有一个元素被永远的弹出栈。所以
1051F 2400
题目中明显标明
于是就可以先建一棵生成树,两个点的距离就是链上的距离。
然后再把不在生成树上的边加进图,然后以这些不在生成树上的点为源点,跑 Dijkstra。最多也就跑
762C 2100
因为需要在
我们可以处理对于串
859E 2100
首先,连边,建图。对于每一个连通块,会有 3 种情况:
- 是一棵树。设其大小为
。然后会有 种方案数。 - 有环。这个环你会牵一发而动全身,所以会有
种方案数。 - 有自环。方案数为
。
乘起来即可。
985D 2100
今日每日一题。但是昨日的每日一题太难了没写
注意:翻译没有体现出来的一点是:最后一个堆的大小是
二分答案(即能摆多少堆)。然后对于每一个堆数
- 若
,则最大沙袋数明显 。 - 否则,取剩下堆数为
堆。它肯定是呈一个前面的增长率为 ,后面的增长率为 的一个山峰。那就计算 的等差数列和这个山的沙堆个数加起来即可。
1184E 1900, 2100, 2400; 827D 2700
首先求最小生成树。
对于每一条边
若该边不为树边,那么取树上的链
的边权最大值。如果小于等于这个最大值,这条边就可以被计入最小生成树里。 否则,这条边是树边。对于这条边所在的一个环(算上一条非树边
),如果这条边大于 边边权,那么这条边就不是树边了。会被 替代。所以树边的答案就是所有 边边权的最小值。 那么处理方法就是,对于每一条边
设置一个 ,存储它所在的所有环的非树边的权值的 。可以在算每一条非树边 时,给所有 。
这些都可以使用线段树 + 树链剖分实现。
- Title: 名字贼长的玩意练习记录
- Author: 11490DX
- Created at : 2025-02-21 21:38:11
- Updated at : 2025-02-28 15:58:34
- Link: https://11490dx.net/2025/02/21/R702-cfra-practice-log/
- License: This work is licensed under CC BY-NC-SA 4.0.