9.28 ~ CSP-S 2024

9.28

上午打代码源模拟赛,T1 读错题 2h,虽然最后做出来了,是一个类似于换根的树形 dp。但还是没时间做别的题了,只打了暴力。
T2 是在笛卡尔树上干啥来着没听明白。T3 是二项式反演,不会。T4 摆了。实际上是都摆了。

下午打 MX-X。但是被讲题打断了。
T1 签到题。
T2 只会做 \(q\) 遍 SPFA,毫无疑问是纯纯的暴力。后来在椰树牌选手 lhy 的教导下发现无解的充要条件是存在相邻的两个数和小于零。那么就建一张新图,边权是两点之和,这样都为非负整数,可以跑 dij。最后除以 \(2\) 就行了。
T3 不会。只写了暴力。

晚上是 ABC 时间。
前三题都是简单题,D 写了个差分约束居然没卡 SPFA,好耶。不过不会正解。E 两遍二分,细节很多,写了好久。F 是神秘 dp 优化,大概是斜率优化,不会。G 是蓝书上的 Ants,不过费用流有点卡,得用 KM,直接贺了一个。最后 rk112,上大分,+616!

补充:D 直接跑 dfs 就行了,唐。

9.29

早上进行了运动会开幕式的观看,卡点回来打模拟赛结果没有??然而李在这也回不去了。发怒。

补昨晚 F:https://www.cnblogs.com/LHLeisus/p/18438838

P2051:之前一直没想到按行 dp,想到就做完了,简单题。

P5304:什么东西,完全没想到……居然可以按照每个二进制位分组跑 \(\log n\) 次最短路!也可以考虑每条边的贡献,不过好像麻烦一些,就不想思考这个做法了。

后面高强度摆烂,我不好说。

9.30

早上高强度睡觉+水博客到快九点,啧啧啧。

P4441:昨天看了一下午都没写,今天必须写了。

这下又成抄题解了。第一问如果想到了每个合法后缀右括号减左括号都应大于 \(1\) 是好求的,dp 就行了。然后由于第二问要求字典序最小,不能随便记转移前驱,考虑 bfs。从 M 开始,记录当前位置,剩余的长度,以及左右括号的差值,利用 dp 数组可以判断当前是否合法。把他们放到优先队列里,第一关键字是长度,从小到大(原因是因为剩余长度小的一定是先扩展了,先扩展说明字典序小),第二关键字是当前的字符。同时还得记录 vis 数组,但是只有位置两维是不行的,还要加上差值,因为走到同一个点时的括号序列可能是不同的。

然后干了这个:https://www.cnblogs.com/LHLeisus/p/18441560。其实可能比较摆,写的很慢,感觉写的也没啥深刻的道理。

10.2

没意思,凭啥隔壁学校竞赛班不用上课?

上午又是合作伙伴的模拟赛。T1 是数位 dp,但是一开始以为是容斥。推了半天容斥不会算问李泓毅咋做才知道数位 dp 可以随便做。后面几题只打了暴力,不会做。

下午正好有洛谷月赛,冲冲冲。
A 看了 10min 才会,有点唐了。最佳策略就是一条折线。
B1 感觉是 CRT,一开始试了 \(2\) 和 \(3\) 两个模数,发现过不了。其实是需要两个乘起来大于 \(4e8\) 的互质模数,不过我不是很知道为啥。懒得写程序看,就问 chatgpt,结果它告诉我两个三十九亿多的数,我以为是三亿九,没数位数,调了好久才发现位数不对啊奶奶的!然后就过了。
B2 不会,一点都不会。李泓毅也不会。
C 只会暴力,D 一点不会。

然后 B2 真的很,厉害。我们都只注意到一半。首先先查 \(1e18\),再减去得到的余数,记为 \(X\),肯定是 \(m\) 的倍数。然后你发现,(注意到!)\((X-1)\bmod m=m-1\)。于是就做完啦!这谁能想到啊?真磕了。

中间还有上午的讲解,摆了。
晚上也很摆,只是口胡了这道题,而且还非常不想写。胡完再写吧!

P4185:先把询问按照 \(k\) 从大到小排序。之后我们扫描询问并使用并查集维护联通块。具体来讲,我们要维护的联通块内部的边都必须大于等于当前询问的 \(k\)。当然了还要记录大小,这是简单的。一开始,把所有边都断掉,只保留大于等于最大 \(k_i\) 的边。之后每处理完一个询问,就加一部分边进去。时间复杂度 \(\mathcal{O}(n\log n)\),瓶颈在于排序。
OK 也是一遍过了。

10.3

上午模拟赛又是,不会。问了李泓毅第一题,感觉很神秘啊。根本想不到状态设计,还是,没天赋。其他题不想补,听都没听。

第一题就是,观察一下三个操作。\(a\) 感觉 dp 的时候直接算进去就行了;\(b\) 感觉很难处理,但是如果知道了后面攻击多少次,似乎是个等差数列来着;\(c\) 的计算也是基于后面的攻击次数。
那么就知道了,我们需要倒着做。设 \(f_{i,j,k}\) 表示后 \(i\) 轮游戏,攻击了 \(j\) 次,并且当前 \(b_i\) 在后面会被计算 \(k\) 次。感觉转移还是很随意的,不过 \(j\) 和 \(k\) 的枚举范围要算一下才可以,而且注意不合法的状态要设成负无穷。

下午又是 MX-X。
A \(1\) 和 \(a_n\) 交替就行了。
B 想了个很唐的做法。具体要用到线段树维护每个点的权值减去当前的 \(i\) 的区间最大值,大于 \(0\) 才合法。很唐,至今不知道别人的黄题做法是怎样的。调了好久。
C 不会啊。只想到了 \(65pts\) 的平方暴力。cyl 队爷说想到暴力就会正解了。实际上我的暴力有点太暴力了,对于只包含一个点的矩阵贡献恒为 \(1\),我没有发现这个(或者说写暴力不需要这个)。

正解就是,数包含 \(0\) 个和 \(1\) 个关键点的 \(\frac{n}{2}\times \frac{n}{2}\) 的子矩阵个数。\(0\) 的贡献是 \(2\binom{\frac{n}{2}}{2}=(\frac{n}{2}\times (\frac{n}{2}-1))\),\(1\) 的贡献为 \(1\)。

然后用线段树来计算矩阵和,相当于最小值和次小值,pushup 的时候随便搞一下就行了。然后具体来讲枚举 \(l\) 和 \(r(r-l+1=\frac{n}{2})\),作为子矩阵的左右边界。这样子固定 \(l,r\) 时我们有 \(\frac{n}{2}+1\) 个矩形,放到线段树上就行了。\(l,r\) 右移时,就是两个区间修改。
D 也不会,但是据说 D 比 C 简单/ll。

晚上怎么还有神秘李赛?
P2882:考虑枚举 \(K\),那么利用差分算出次数就行了。
P3017:二分答案。chk 的实现有点麻烦啊。一行一行来看,如果这一行不够就把下一行弄进来一起算。反正 chk 是 \(\mathcal{O}(n^2)\) 的。
P4653:先把两个数组从大到小排序,再前缀和。那么答案就是 \(\min (a_i,b_j)-i-j\),双指针。
P3467:随便单调栈吧,每有两个一样高的且中间没有更低的块就可以少一次操作。
P1314:随便二分。

怎么这么唐?

10.4

感觉糖丸了。上午太困先睡了 1h,感觉把脑子睡没了,一个都不会做。后来在 lhy 的帮助下做出了 T1 和 T3。T1 发现最后的 And 可以算出来,然后直接贪心就行了。T3 考虑在每个数第二次出现时计算答案,简单 dp 随便上个 BIT 维护一下就行了。其他两个不会。T4 其实是没看。

下午没比赛了。
先补了昨天下午 T4。感觉糖丸了,昨天多想想肯定能想出来的吧。就是根据链顶可以得到若干条链,这些链内部有 \(\sum(len-1)!\) 种方案,然后拼接的时候假如按从大到小排序方案数就是 \(\prod_i\sum_{j<i} len_j-len_i\)。唉唉,糖丸了。

讲解没听懂还睡着了。就这样吧。

之后做 noip1 的内容。
P2671:想了大概 10min。把贡献的式子拆开,分奇偶维护四个前缀和即可。
P3128:LCA 和树上差分。顺便复习了一下 \(\mathcal{O}(n\log n)-\mathcal{O}(1)\) 的 ST 表求 LCA。

10.5

上午一个题都不会。

下午睡睡睡。睡醒了听听讲解,不过想只听前两题。
T1 我写的是正解啊妈的。我以为复杂度是 \(\mathcal{O}(n^2\log n)\),结果实际上每个点只会被访问一次,只是 \(\mathcal{O}(n\log n)\) 的。糖丸了。
T2 没听懂。

P1052:两个石头之间距离过大是没用的,缩短到一个能接受的范围就可以 dp 了。比较有道理的是变成 \(\operatorname{lcm}(1,2,\cdots,10)=2520\)。
P3138:跳了。离散化+前缀和。
P2401:这个不是 noip1 里的,是 yzh 突然问我的。原来是去年他给我发的。这不一眼连续段 dp 吗。我猜我去年根本不会做,抄的题解,于是就推了一下方程,秒了。多少还是有进步的。学套路也算。
P3143:双指针,正反做两遍。不是,咋写了 40min 啊?唐完了吧。每次写双指针都感觉不会写。

晚上 ABC 糖丸了。前四题送分题,但是怎么 D 写了 30min 啊???唐完了吧。结果 EF 都不会。G 是个 DAG 上的可交的最小路径覆盖,我他妈完全忘记了,写了个假的。哭了啊。涨了26 rating。

10.6

上午还是一个题都不会,我真服了,我是唐诗吗??
T1 首先有一个性质:求 MST 可以先求若干个子图的 MST,然后再用这些边求 MST。发现每个点处的边会连成一个团,然后这个子图的 MST 就是最短的边作为根,其他边连在下面。这样只有 \(\mathcal{O}(m)\) 条边,跑 kruskal。

下午有 CF 阳间场。结果还是唐完了。B WA 了四发,感觉不好评价。C2 想了个线段树做法,现在感觉大概是假了,结果一直在调 C2,没做别的,唉。掉大分。

昨晚的 E,感性理解一下性价比低的不会买太多,二分完枚举就行了。这很难评。

调了一万年昨晚 G,最后发现建图建错啦!。。。我把每个字母之间连边,这样就成了把每个边都覆盖一遍了。把首尾能相连的串连边才是最小链覆盖。唉唉唉。
P1311:去年做过,有些忘了,再看感觉双指针可做,结果调了 1h。。。有点太不会双指针了。但是过不去加强版,就回顾了一下题解做法。记录最近的合法的咖啡馆,记录合法的咖啡馆之前有多少个当前种类的客栈,再记录一下上个当前种类客栈在哪里,几个数组互相倒腾一下就行了。
P1638 and UVA11572 and ARC098B:简单双指针。

10.7

很烦。不想上学。我想放假。摆了一上午。

P1950:看起来很悬线法,但是不会。数数太难。每一行里,记录 \(l_i\) 是左边第一个小于等于 \(i\) 的,\(r_i\) 是右边第一个小于 \(i\) 的,这样每个矩形就只会在最左边的最矮的长方形被计算到,不重不漏。悬线法不是很会写,就写单调栈了。结果因为数据里面有 \r\n 而我只写了一个 getchar,一直调不出来,唉唉,再也不这么写了。
P2032:单调队列板子。
P2216:一开始写了一个暴力的 \(\mathcal{O}(abn)\) 的单调队列,T 了三个点。正解是先对行进行单调队列再对列进行,有点像二维前缀和了,复杂度 \(\mathcal{O}(ab)\)。
P1725:单调队列优化 dp 板子。糖丸了,先更新再计算,弄错了调了半天。
P1419:不会。没救了。先二分,然后减掉 mid 就变成求一个最大子段和了。最大子段和也,不会写。。
noip1 还剩两个单调队列优化 dp 的绿题,不是很想写了,感觉没什么必要。

10.8

我本来想带手机来的啊,想了想还是没带,后悔死了

咋今天还有模拟赛?上午又会 \(0\) 个题,我习惯了。我不习惯,我自闭了。
后来在网上搜到了 T1 原题,还看了题解,于是会了。真想不到啊。。
复习了 P1600,感觉可以写到图论 notes 里面。
补了上午 B。感觉对 KMP 的理解加深了?之后字符串的时候再说吧。
P1196:复习了一下带权并查集。
P7973:这个题完全不会啊,写了好几个假做法。服了。而且我一开始连连边的充要条件都想错了。这个充要条件就是,较大的数的 \(0\) 位是较小数的最高位。然后位运算胡乱预处理一下,把符合条件的和对应这一位的并查集合并(多开 \(30\) 个)。不过要注意,充要条件的前提是在最高位之内,因为如果是最高位之外的 \(0\) 的话你会发现正好反过来了,是不对的。不要无脑用 \(29\) 或者 \(30\)!

10.9

大家好啊,我喜欢睡觉,写假做法。于是我边睡觉,边写了很多假做法。
P8059:正难则反很显然。但是我一开始写了个假的带权并查集。后来看了题解,看到可以用链表,或者干脆就不用并查集,只 dfs 就行。后来突然想到哪里错了,改了改,带权并查集过了。
P8287:bfs,然后并查集维护一下连通性。然后经过的边不能再经过,点是可以的,想了半天没想到这个,看了题解/yun。
P8710:感觉一眼带权并查集,结果写了半天都不知道咋写。看了看题解发现暴力的话 \(n^2\) 能过。其实带权并查集是可以的,只是要注意路径压缩的时候递归到根节点下面一层就要 return,因为其他的点只会累加一次父节点就换父亲了,而直接连在跟下面的不会,导致多次累加父亲的值。
P1197:好困/shui。并查集直接做就行了。
P2835:首先肯定可以缩点。如果要用并查集做的话,首先先用 floyd 跑一遍传递闭包,之后 merge 的时候就不要两个点都 Get 了,因为关系是单向的。
P3535:网上能够搜到的题解都说贪心很显然,呵呵,显然不显然,我想了一万年都不会,看了题解以后证了一万年都没证出来。回归正题。我们把两端点都 \(>k\) 的边称作黑边,其余称作白边。结论就是,黑边全都要保留,剩下在白边里面跑不排序的 kruskal。证明的话,是抄的。假设没有黑边的话,白边肯定是形成一个树(森林)。现在加一条黑边进来,最多形成一个环,或者没有环。没有环肯定是好的;就算形成环了,删掉一条白边就行了,答案不变。所以,黑边全都要选。
P2941:这个题感觉最大的问题是题意不清。实际上没啥难的,感觉也就黄题水平。但是我读错题了/hsh。

今天看似做了好多题哦,实际上都是简单题,有点小摆,也有点 emo……唉,咋办呢?

10.10

今天有模拟赛。
P6359:这个是 T1。首先肯定按照 \(f\) 从大到小排序,然后把买机器的 \(v\) 变成负的,就变成 01 背包。设 \(f_{i,j}\) 表示前 \(i\) 个计算机或订单,用了 \(j\) 个内核。
后面不会做啊。
看了一下均分纸牌,从原问题拓展了一些,总结了一下,虽然不知道有什么用。
P3101:建一张网格图,边全是差值的绝对值,然后从小到大枚举边,用并查集维护连通性。同时还要维护连通块内关键点的个数和总点数。合并时如果大小超过了 \(T\),就用关键点个数乘上当前边权这样子计算。
补了上午 B 题。又栽在开了 long long 写左移的时候没写 1ll 了,下次能不能想着点啊。

10.11

去上早读了,激烈背诵英语单词。
还是太困了,又好晚才开始上线。
P3127:这个昨天看了一晚上不会啊。看题解,结果题解写了一堆 \(n^2\) 暴力过的。。。所以其实是用 set,不用并查集。考虑从大到小插入干草堆,每次二分找到所在区间,如果这个区间不合法,那新的两个小区间也不合法。否则判断一下两个新的区间长度是否大于当前干草堆大小就行了。因为大区间已经合法就不用再判断两个端点了。
P3207:这个题好厉害。首先可以想到,尽可能多的加 \(x\),也就是先尽量往后跳 \(d\),跳不动了再一步一步跳。当然了当前位置合法就立即停下。一开始的想法是并查集直接往后找第一个合法位置,显然假了/hsh。其实是应该按照跳 \(d\) 步分成若干个环,一个并查集维护当前还上最近的合法的点,一个并查集维护当前最近的合法的环,直接模拟上面的过程就行了。至于最后的置换,含 \(0\) 的置换环累加环长减一,其余累加环长加一即可。
P3465:一眼题。结果写的太烂写了一万年才过。
晚上看(听)崩铁前瞻,乐。
P3820:有一点没考虑到,就是土变回温泉的时候应该新建一个点,而不是直接用原来的点。

10.12

又到周六了/kk,不想打模拟赛啊。
A 又让哥们搜到原题了。能不能自己多思考思考啊,唉,感觉没救了。首先把所有点从小到大排个序,这样插入时就只能插在这个凹函数最两侧。设 \(f_{i,j,k,l}\) 表示两侧的最外侧两个点(从左到右)分别是 \(i,j,k,l\),你发现不知道按啥顺序转移。不过把函数翻转的话答案肯定不变。那就钦定 \(i\) 是最大的那个数,每次用 \(i+1\) 转移就行了。感觉,不知道为啥想不到。
upd:实际,不用记 \(n^4\) 的状态,一定有一个数是最大数而另一个数是次大数,这样 \(n^3\) 就解决了。
后面三个题摆了。唉。
B 是一个区间 dp,我不好说,今天要打 ABC,不补了,明后天再说了。
P4079:这题直接搜就行了。并查集做法是转动比具有传递性,而且在环里的转动比之积一定为 \(1\) 才合法,用一个带权并查集维护。不是很懂??
P4092:如果有人上树剖线段树了,那我只能说是学 ds 学的。离线下来反着并查集就做完了。
P4255:很有趣的题,嗯,我一开始是这么评价的。后来先写了个线段树合并结果被卡空间。后来换成 map 启发式合并又被各种卡空间。最后还是有奇怪的 bug,明明数据是 \(4e5\),却必须开到 \(4e5+9\) 才能过。服了,也不知道为啥。
upd:算组合数的时候下标出现负数了。
晚上 ABC 激烈贺题,不好说。

10.13

模拟赛,唉。T1 二分然后变成只有 \(0\) 和 \(1\) 的问题,就能算了,唉,没想到。T2 神秘贪心,没想到。后面没听。
找到昨天 F 的 bug 了,每次 floyd 的时候反向也要更新,不然有的路径可能更新不到。
下午打洛谷 CSP-S 模拟赛,获得了三等奖。
第一题看了一个小时才会。发现最多也就挑十个出来,所以直接 dp 就行了。后面不会。一开始以为自己会 T3 了,结果写着写着发现假了,但是还是获得了 \(35\) 分。T4 好像暴力有好多分,不过没打。打了就有一等奖了。
晚上在洛谷一口气交了所有能交的蓝书题,发现都不会。。。妈的去年为啥一直抄题解啊,傻逼吧傻逼吧傻逼吧傻逼吧傻逼吧傻逼吧傻逼吧。找时间补补了。直接来吧!
SP703:设 \(f_{i,x,y,z}\)。然后发现第三个人的位置可以推出来,减一维就过了。

10.14

P10972:也是比较直接的状态设计。首先肯定是按行 dp,然后一共选了几个格子一定要记的,那么这一行选了哪些也得记,也就是左右端点。还得记录左右边界是扩张还是收缩。不过凭啥 \(4n^7\) 能过?
P10971:会发现把 \(g\) 降序排序后,分的饼干数也降序一定更优。设 \(f_{i,j}\) 表示前 \(i\) 个人,分了 \(j\) 块饼干。转移的时候,你发现需要知道前面比他大的个数,换言之就是前面和他相等的个数。但是把这个也计入状态时间就炸了,\(n^2m^2\)。考虑直接枚举前面有几个人相等,你发现这些人(包括 \(i\))都只能暂时分到一块饼干,因为分得再多可能就不满足单调递减了。另外,如果当前分得的数量大于 \(1\),所有人都减去 \(1\),实际上答案是不变的,这就是等效吗!!于是就做完了。
P10975:状压,显然。我们让 \(1\) 表示竖着的上半部分,\(0\) 表示其余的,预处理一下每个状态是否合法(连续的 \(0\) 是不是偶数)就行了。因为每次我们把这一行和上一行按位或再判断合法,所以竖着的下半部分的 \(0\) 不会影响。
P10976:太蠢了。倍增。\(f_{i,j}\) 表示从 \(s_1\) 的第 \(i\) 位出发,合成了 \(2^j\) 个 \(s_2\) 需要的最小长度。有一些预处理之类的。怎么想到的?不知道啊?
P10982:我一点都不会计数题。没救了。首先不好直接算,容斥一下用总数减去不合法的。总数很好算的。算不合法的方案数时候考虑递推。每次枚举 \(1\) 所在的连通块大小,这样要乘一个组合数,剩下的点之间随意连边。
P4380:又接着做并查集了。第一问是随便做的。第二问考虑先把颜色一样的连通块缩起来建新图,然后所有边按照两端点颜色排序,这样每次能一次性取出所有连接当前两种颜色的边,写个栈,可撤销并查集就能维护了。
P4873:两头牛能在同一跑道上的充要条件是 \(p_i<p_j\) 且 \(p_i+Tv_i<p_j+Tv_j\),然后就是求上升子序列的个数,这个好像是等于最长不下降子序列长度来着,但是忘记为啥了,反正是对的。有空看看。所以并查集咋做?

晚上激烈 CF,C 咋写了半天啊?D 是个 dp,我居然做出来了,nb。EFG 不会,一直在看 E,企图做出计数题。后来看群友说 F 更简单,不过时间不够了,就摆了。

10.15

模拟赛爬。
不想做并查集了,感觉有点做太多了。还是 dp 启动吧。
P6835:虽然但是,为啥要做期望?看了题解,式子确实好推,但是自己没想出来。感觉关键是状态的设计,\(f_i\) 表示第一次从 \(i\) 到达 \(i+1\) 的期望步数。
P2516:没想到的地方就是,若 \(s_i\neq t_j\wedge f_{i,j}=f_{i-1,j-1}\),\(g_{i-1,j-1}\) 是会被多算一次的,要减掉。
P1280:为啥不会做?我是傻逼吗?就是设 \(f_i\) 表示第 \(i\) 秒时有多少空闲。转移就枚举从这个点开始的任务向后转移就行啊,初值是极小值。或者说排个序,以第几个任务为下标,转移枚举前面的任务,要求中间没有其他任务,用前缀和,总之是好做的。我是傻逼吗?
P1944:设 \(f_i\) 表示以 \(i\) 为结尾的合法串长,用个栈维护就行了。其实感觉贪心也对啊?但是写挂了。
P6902:贪心处理出每个点的决策再倍增。细节是倍增数组的定义是开区间还是闭区间以及后面判断区间长度时是否要加一。

10.16

困。上午高效浪费时间,唉,为啥啊??
P2519:不会。发现对于一个人,可以算出在哪个区间内分数都是相等的,然后就变成了找出最多互不相交的区间,但是可以重合,而且重合的个数不能多于区间长度个。我唐完了,树状数组明明直接维护的值,我还加了个 f[] 上去,导致一上午都在干这个。。。。
P1758:很妙啊。平方相当于有两个人同时在两个同样的装置取球,最后序列一样的方案数。然后随便 dp 就行了。
P5017:好题。最朴素的直接按照时间 dp。然后发现转移多于 \(m\) 都是不优的,有很多无用的状态,狠狠地优化。或者直接斜率优化。这还是普及组吗这给我干哪来了?
P2391:还是做了这个并查集维护连通性典题。结果没有初始化 \(f_{n+1}\) 寄了/kk。
升级了一下缺省源。改进缺省源的尽头是抄 lgx 的缺省源

10.17

模拟赛不评价。感觉打的时候完全不带脑子。
P1140:不评价。
P1233:不评价。
P9753:又看了一遍这个题。自己还是做不出来,解法依然高妙。智商到上限了。
复习数学,打了若干板子。
P2613:读入时取模就可以了。

10.18

P2421:吐槽:最大值取成 \(l_i\) 的了,调了一万年,实际早写对了。就是解一个很直观的同余方程。我一开始想的比较麻烦,不过最终推出来都是统一的。
P1349:不评价。
P1390:两种做法。一种是传统莫比乌斯反演做法,但是需要注意到 \(id*\mu=\varphi\)。或者直接用欧拉函数的定义去做,不用莫反。
SP3871:这题加强了,根号过不去。我们把第二个求和单独设成一个函数求解,这样最终答案就是一个前缀和。然后还是用欧拉函数的定义推式子。不过这里 \(\varphi(1)\) 要赋值为 \(0\),因为带到式子里就是 \(0\)。\(\lfloor\frac{n-1}{d}\rfloor=\frac{n}{d}-1(d|n)\) 感觉也很妙,有了这个才能用欧拉函数定义去推。

不过其实也不用像上面一样设 \(g_n=\sum\limits_{i=1}^{n-1}\gcd(i,n)\),直接求和到 \(n\) 就可以了,最后减去 \(\frac{n(n+1)}{2}\) 就行。这样避免了后面奇奇怪怪的麻烦。

10.19

放假。只参与了晚上的 ABC,唐完了,所以掉大分。

10.20

上午模拟赛。不想打。不评价。
P2155:就是,完全不会。第一步就不会。所以没必要写了。
复习了高斯消元相关知识。
P1641:不会卡特兰数导致的。
P6583:很牛的题,完全不会。
是不是太摆了?

10.21

P1357:\(n\) 这么大,\(m\) 这么小,感觉矩乘和状压很明显了。代码还挺好写的一遍过了。
ARC172C:不是哥们,怎么是我打过的那场 ARC 的 C 啊,还这么简单,当时没做出来不是唐完了。把 A 当做 \(1\),B 当做 \(-1\),那么最终的答案与前缀和的奇偶性有关。而且一次交换只改变一处,线性扫过去就行了。为啥要用哈希啊,多麻烦?
CF126B:这真是唐完了,为啥不会啊?研究了一万年之前的代码,最后得出结论做法假了,不懂为啥能过啊?运用到一个性质,kmp 的 \(nex\) 数组在数值上是连续的,因为在求解 \(nex\) 的过程中每次要么是 ++j,要么 j=nex[j]。增大是连续的。(或许好像原来代码没问题)
UVA10298:就是找循环节板子。忘了为啥 \(n-nex_n\) 就是最短循环节了,看了一下。
P3435:暴力就是每次往前跳 \(nex\),然后我们跳完 \(nex\) 把当前的 \(j\) 赋值给 \(nex\) 就可以避免下次跳很多次了,搞不懂复杂度怎么算的。大概是线性。
UVA11022:区间 dp,需要 kmp 判断一下循环节。
CF526D:题解写的很清楚。
P2375:经典老题,第三次做了。这次口胡出了 fail 树上倍增的做法。很蠢,根本不用建树直接数组上倍增就行了啊。然后学习了一下线性做法。大概想法就是控制当前的 \(j\) 时时刻刻都小于 \(\frac{i}{2}\)。复杂度还是线性,分析同 kmp 复杂度分析,拜谢李泓毅。就是说把 \(j\) 变小的操作均摊到 j++ 上面。而后者最多有 \(n\) 次。

10.22

上午模拟赛不想打,就没打。
CF1200E:把前后两个串反过来拼起来跑 kmp 或者直接哈希就行了。写了个双哈希。
P7114:题解写的很清楚。不过注意不要滥用 memset,会 TLE。
P4503:只会竖着做,但是 map 或者 unordered_map 都被卡了。然后实际上横着做就行了。相当于枚举去掉哪一位。
P3538:不会。我们需要 \(\log\) 的单次查询。首先循环节的 check 是简单的,用哈希判断。然后循环节的倍数还是循环节。其次这个循环节一定是 \(len\) 的因数,肯定不能直接 \(\sqrt n\) 找。我们可以在线性筛的过程中记录每个数的最小质因数,记作 \(g\)。这样每次用 \(len\) 除以 \(g_{len}\) 就可以得到所有质因子,时间复杂度是 \(\log\)。之后遍历这些质因子,设 \(ans=len\),不断地用 \(ans\) 试除,如果除完还是合法的就说明我们的最小循环节没有这个质因子,可以除掉。否则保留。

10.23

复习图论板子若干。
下午怎么还有神秘李赛?
ABC187F:直接状压,要枚举一下子集,\(3^n\)。想了一万年才想到枚举子集有救吗?
P1054:难评,这个凭啥蓝题啊?不过怎么只有我过了?/oh
T3T4 都不会/kk。
尝试做出双栈排序未果。

10.24

程序员节是吧。
P1155:千锤百炼,世纪难题。完全想不到把不能在同一个栈里转化成二分图。
P2149:不会。最短路一定是链。可以把最短路对应的 DAG 处理出来,然后找两个 DAG 的交的最长链。不过要么是只有同向边的交,要么是只有反向边的交。不是很好写,也不算太难写。
CF1076D:一开始写了个,至今不知道正确性的无法实现的贪心。实际上你把所有点的 \(pre\) 记下来,形成一棵树。答案就是这棵树从上往下的 \(k\) 条边。
复习 prufer 序列并默写一万遍。然后摆烂。
晚上 CFdiv3 手速太慢恰烂分失败,没有上蓝。

10.25

最后一天了。数学物理化学竞赛的同学要退的已经分班了,七班离解散已经不远了。虽然总是说着和班里同学联系不多,大部分时间也不在班里,但是心里感觉还是有点伤感的,大家要是有个合照就好了呢。
昨天熬太晚了。今天上午高强度睡觉。睡醒了,看了一个题一万年不会做。唉。

之后见 Day 0。

10.26

见 Day 1

加油!

posted @ 2024-09-28 14:26  LHLeisus  阅读(0)  评论(0)    收藏  举报