总结

复健模拟赛

3.15

T1:爆搜,meet in the middle

T2:期望,找性质,递推

T3:点分治,并查集

T4:计数,递推

总分:100+30+0+0

T1:打了个爆搜发现过不了,开始尝试奇怪的乱搞,比如把值域分治一下之类的,最后发现竟然可以meet in the middle,一共耗时40min(算上上厕所的时间),太慢了。
T2:和代码源的一道题长得很像,但做法好像没啥关联。场上尝试进行一些DP,容斥,拆贡献啥的方法,但都没啥用,感觉 \(E(dep(lca(u,v)))\) 完全无法计算,最后暴力30分离场。

这道题需要观察到一个极其困难的性质:当 \(u<v\) 时,\(E(dep(lca(u,v)))\) 只和 \(u\) 有关。然后可以递推计算 \(f[u]\)表示 \(u\) 的期望深度, \(g[u]\) 表示 \(u\)\([1,u]\) 的lca的期望深度。可以 \(O(n)\) 递推。然后询问直接拆贡献

T3:卡在T2,没开。

很难想到点分治。LBL表示,可以把提议转化成有多少个点存在一条到 \(u\) 的路径,使得路径上的边的加入时间递增。可以用点分治统计路径数。

具体的,对于每个分治中心,维护每个点到达根的最早时间(并查集),以及从根到达每个点的最晚时间。

T4:卡在T2,没开。

好像是个DP题,不太会

总结:对于有些简单题会想很久,然后才反应过来。观察性质的能力有所欠缺。点分治的题练的有点少,得找个时间补一下

3.30

T1:adhoc,meet in the middle 卡常

T2:

T3:FWT

总分:70+0+0

T1:非常的难想到,转化了很久,然后发现莫名其妙地对了。发现可以meet in the middle维护,但是被卡常了。

第一眼:这不是主旋律吗?第二眼:这数据范围怎么这么大?第三眼:竞赛图SCC是链,统计链上某一个大点的贡献?第四眼:不太好做,应该尝试统计链尾的大点的贡献?第五眼:好像每个集合对于链尾的贡献都是一?然后写了一发,枚举 \(2^n-1\) 个非空集合,令不在这个集合中的点全部连向集合中的点,其他边不管,对这个概率求和,发现竟然是对的。可以meet in the middle \(O(1)\) 计算给集合加入或删去一个元素后的概率。

赛时写的暴力模拟进位来给集合加减元素,但是因为进位带二倍常数过不了,需要开一个DP数组,计算 \(lowbit\) 的贡献

T2:给T1卡常,没开。
T3:给T1卡常,没开。

假如 \(A\) 胜利,考虑它参与的两次投票方案,有些人两次都投他,概率是 \(1/3\) ,有些人一次投他,概率是 \(1/6\) ,有些人不投他,概率是 \(1/3\) ,所以说答案是 \((\frac 1 3)^n 2^{2n-2}\sum_{f(s1)=1,f(s2)=1}(\frac 1 2)^{popcount(s1\ xor\ s2)}\),后面那个可以用FWT计算

4.2

T1:构造

T2:拆贡献

T3:SAM,lct,可持久化线段树

T1:在使用奇偶性搞出了 \(n\) 为偶数的情况后,尝试用类似的做法构造出 \(n\) 为奇数的情况,拼尽全力也无法构造出 \(n \ge 17\) 的做法。

最后发现按奇偶性搞根本搞不了,需要按照值域构造。把 \(2\)\(\lceil n/2 \rceil\) 配对, \(3\)\(\lceil n/2 \rceil -1\) 配对,以此类推。还剩一个 \(1\) 用来微调。如果 \(2\)\(\lceil n/2 \rceil\) 恰好配对完,则让 \(1\) 匹配 \(\lceil n/2 \rceil+1\) ,否则还会剩一个 \(\lceil n/4 \rceil+1\) ,则让 \(1\) 匹配 \(n-\lceil n/2 \rceil\)

T2:考试的时候一直尝试算出每个点到根的期望代价。发现这个东西就很难算,开始尝试把平方项拆成零次项和一次项

正解拆贡献,计算某两条轻边会被算多少遍。如果一条轻边在另一条子树内,则次数为一个子树和一个xiang,否则次数为两个子树的大小的乘积。

T3:赛时打了个 \(O(nqlogn)\) 的暴力,40分还可以

正解不太会啊

4.6

T1:莫队,根号分治/分块

T2:线段树合并

T3:博弈,换根DP维护子树直径

T1:比较快的想出来了根号做法,但是感觉NKOJ过不了,但发现其他人都在敲代码,而且好像不太能 poly log,然后就写了,40min才过
T2:探究得到把图拓展后 \(u,v\) 间有边的充要条件是:在原图中 \(u,v\) 间存在一条只经过编号 \(\le min(u,v)\) 的点的路径。又发现每个点连向的编号比它大的点,颜色一定两两不同。把边看成从小连向大的有向边,于是答案等于 \(\prod _u(n-out[u])\) ,考试中尝试从小到大加点,用并查集维护,一直WA,调了一整场比赛,赛后发现有点问题。

对于一条边,如果在枚举到编号小的端点的时候在并查集中连边,会被

4 3
1 3
1 4
2 3

卡掉。正确的做法是在枚举到编号小的端点的时候把另一个端点加入集合,枚举到编号大的端点时在并查集中连边,并合并集合。可以用线段树合并维护

T3:考试是看倪哥直接把这题切了,感觉可能不会太难,但卡在T2了

观察发现胜负只和直径长度 \(\%3\) 有关,于是换根DP维护子树直径

总结:数据结构写得还是有点慢。自认为很对的做法过不了大样例,应该尝试手玩小样例之类的。

4.9

T1:结论题,bitset

T2:乱搞,数学直觉

T3:构造

总分:96+28+0=124

T1:思考了非常久,一直以为是 meet in the middle之类的。然后开始猜结论,竟然猜对了。想到一个 \(O(n^3V/\omega)\) 的做法,得到 \(96\) 分,懒得卡常了

发现对于确定的第一行,第二行从小往大放一定是最优的,对于确定的第二行,第一行从大往小放一定是最优的。所以第一行从大往小,第二行从小往大放是最优的。发现这种情况下,最终的路径要么会把第一行取完,要么会把第二行取完。最大值,次大值一定在不同行,把这俩排除后,题意就变成了把剩下的数划分成大小相等的两个集合,使得 第一个集合所有元素的和 和 第二个集合所有元素的和 的差尽量小。可以用bitset做背包。shuffle一下原数组可能会更快

T2:不是很难,但是被T1卡太久了,只打了暴力中的暴力,但凡不那么暴力说不定就过了。

首先 \(l \ge maxv -106\) 于是直接从下界开始暴力枚举 \(l\) 并check,然后就过了。理由是大概率有质数或质因子不多的数,所以说 \(l\) 和给定的数的值域差距不大。

T3:看着很简单,但实际上除了特殊性质的图基本没思路

正解似乎是从菊花入手。

总结:对于没有什么头绪的题可以乱猜结论,和乱搞

4.12

T1:鸡巴

T2:sb题

T3:不会

T1:池男一年前讲two dishes讲到的原题,我他妈的没写出来,逆天,成功调了一整场考试,傻逼玩意

就是先随便DP一下,再对dp数组差分一下,然后发现可以做了,只要搞个动态点线段树维护全局加等差数列,线段树上二分和区间修改。然后我觉得会MLE,就

写了个二阶差分的做法。这玩意只要区间加,线段树上二分和后缀删除。我又骚搞一下把线段树删了,改成一个栈,结果因为1没有特判好导致获得暴力分数

T2:没看,操

这种逆天题目怎么会评到黑的,一眼树形DP,然后就做完了。我tm还莫名其妙补了一天

T3:原题,没开

半年前讲的,忘都忘球了

总结:我是傻逼吗,原题都不会

4.16

T1:最小生成树

T2:最小生成树

T3:最小生成树

什么jb

总分:100+0+100

T1:数据范围奇奇怪怪,一眼三维回滚莫队,稍作思考发现是线段树,尝试指针写法最后放弃,花费1h终于通过
T2:先乱糊了一个定期重构做法,又乱糊了一个线段树分治lct做法,但是没有写任何一个做法。赛后尝试正解CDQ做法。

发现其实和最初糊的定期重构做法差不多,就是假如有k条边边权不确定,则将这些边边权分别看作-inf和inf,跑两次最小生成树。同时出现在两棵树中的边必选,只出现在第二棵树中的边可能会选。只用存可能会选的边

T3:一点小性质,感觉和D2T2有点像

加入边权 \(\le x\) 的边的连通性相同。所以充要条件是 边权为 \(x\) 的边不与 边权 \(<x\) 的生成树成环,同时 边权为 \(x\) 的边之间也不成环。离线判一下即可。

总结:最小生成树的性质还是挺多的。乱糊的想法可以写在草稿纸上,万一是对的而且待会忘了

4.19

T1:贪心,并查集

T2:期望,FWT

T3:猫树分治

总分:35+40+20

T1:神奇的贪心,考场上一直尝试从根往下选,没有想到连通块合并

考虑有两个01的串 A B,发现把A放在前面使得逆序对数最小的重要条件是 \(Acnt1/Acnt0<Bcnt1/Bcnt0\) 。这个结论可以运用到全局,每次将 \(cnt0/cnt1\) 最小的连通块和父亲合并。用堆维护

T2:没看
T3:没看
总结:感觉还是不太擅长贪心,找性质的题目

5.4

T1:笛卡尔树,树上背包

T2:二位数点

T3:bitset

总分:100+100+20

T1:比较简单

看到区间最大值考虑笛卡尔树

T2:比较简单

考虑交换对中间部分带来的贡献

T3:卡常

谁能想到正解就是 \(O(n^2/w)\) ,考虑分别维护 左右是否同时为1 、2、3。反正就是可以一次比较32位是否有相同的数

总结:还是拼尽全力打暴力,说不定最后发现是正解

5.5

T1:转化,DP

T2:贪心,线段树

T3:DP

总分:10+40+0

T1:没啥思路,但看了题解后感觉正解也不是无迹可寻

这个二的环的个数次方很微妙,以及这个没有奇环。发现 ”二分图染色方案数“ 很符合这玩意。于是直接树上DP。一种方法是先钦定最终的黑点个数,这时每个点的连边方案就只和父亲的颜色有关了

T2:暂时不会
T3:暂时不会
总结:感觉精神状态不太好,没有抓住一些关键点入手,思维比较涣散,最后落得暴力分
最近被ysm和hlb同时批评(提醒),说我经常精神不好,上课、打比赛打瞌睡。ysm说想竞赛学得好的人都不会困,感觉有很多激情,我觉得说点也有道理。但我就是很困,感觉要步yxy的后尘了。
以及chx搞了个什么五月计划,每天给我很多题,我也希望我可以加大练题量,见到更多的套路

5.7

T1:floyd

T2:动态树直径

T3:DP,找性质,构造

总分:100+70+100

T1:感觉 \(O(n^4)\) 可以过,但是鸟人写了一发T了。本来以为要用神奇的性质(类似代码源之前的那道题),结果更改枚举顺序就行了

考虑枚举起点,然后就可以做了

T2:感觉是经典问题,但是我没做过。暴力70分跑路

可以直接用线段树维护,区间 \(l,r\) 存储 编号在 \([l,r]\) 中的最远点对。putup 时把左右儿子最远点对的四个点,两两再算一遍距离,取最大值

以上做法只能修改点权。对于修改边权求直径的问题,可以使用欧拉环游序做。直径的式子本质是 \(max_{u,v}(dep[u]-2\times dep[lca(u,v)]+dep[v])\) ,在欧拉环游序上 \(u\le lca \le v\) 。于是可以直接对欧拉环游序建线段树,存储 \(max_u(dep[u])、max_{u,lca}(dep[u]-2\times dep[lca(u,v)])\) ,可以转移

T3:最开始胡的做法不是很对,导致一边写一边改。最后还因为把 g 写成 G 调了很久

考虑使差分数组与原序列相同。先忽略减,设 \(f[i]\) 表示对 \([i,i+k-1]\) 加了多少次,发现 \(f[i]-f[i-k]=a[i]-a[i-1]\) ,如果满足不了所有条件就是无解,否则会形成 $gcd(n,k) $ 个环,环上的 \(f[i]\) 只能同时加,而且只会加 \([0,16)\) 。现在需要做的是就是凑出 \(a[0]\) 。于是可以DP,设 \(f[i][j]\) 表示考虑了前 \(i\) 个环,\(a[0]\) 的值为 \(j\) 的方案数。转移时枚举第 \(i\) 个环加了多少。注意,加 \(f[i]\) 次可以看成减 \(16-f[i]\) 次,所以两者要取min

总结:数据结构能力有待提升。见过的经典题目不太多。口胡能力有待加强

5.10

T1:manacher,主席树

T2:交互,二分

T3:DP

总分:60+0+0;

T1:比较简单,但是写加调了3h,而且爆int了

manacher算出以每个点为回文中心的最长回文串,对询问的区间左右分别算贡献,主席树维护。

T2:感觉是THUWC试机题减弱版,但不完全是,想了一个非常骚的做法,一直在证明一些东西,然后考试结束前没写完。

考虑二分,每次缩小第一个和第二个序列的答案区间。每次找第一个区间的中点 \(x\),及第二个序列的 \((n+1)/2-x\) ,问一下这两个点的大小关系,这样可以至少把第一个区间减半。直到第一个区间的大小为一,这时可以证明第二个区间的大小也为1(对于第二个区间的某个元素,其对应的第一个序列的元素已经不在答案区间中了,当且仅当之前对比过这两个值,因此第二个区间长度一定为1)。再使用一次比较即可

T3:困难的DP,赛时在做T2,没有细想。赛后想出来一种 \(O(n^5)\) 的DP方法

首先化一下贡献,求存在一个点半径 \(\ge k\) 的方案数。可以DP加容斥,如果集合 \(|S|\) 内的点都可以作为中心,其他点不管,则乘上 \((-1)^{|S|-1}\) 的容斥系数。设 \(dp[u][i][j]\)\(u\) 子树内,最浅的可以作为根的点深度为 \(i\) ,且深度 \(\ge j\) 的点都是 1,所有方案的贡献。这个做树上背包是 \(O(n^5)\)

然后有一个神奇的观察,发现 \(i+j\ge r\),所以 \(i\)\(j\) 不会同时有用,本质上只有儿子中最大的 \(i\) 会限制所有儿子的 \(j\) 。于是就可以设 \(f[u][i]\) 表示 \(u\) 子树内最浅的可以作为根的点深度为 \(i\) ,且深度 \(\ge r-i\) 的点都是 1,同理设 \(g[u][i]\) ,然后枚举所有儿子内最高的 \(i\) 转移。

总结:注意细节。加快思考速度。注意发现性质

5.12

这也是模拟赛?IOI模拟赛是吧

T1:并查集

T2:交互,构造

T3:通信,构造

总分:100+64+0

T1:比较简单,写的时候判漏了奇数的一种情况,导致一个半小时才过

按W排序,询问离线,并查集合并连通块即可

T2:考场上只打了纯暴力和链的暴力,其他不太会了

正解是树的暴力加上只求相邻两个颜色是否相同的暴力。相邻颜色的暴力大概就是动态加点,把颜色相同的点缩成一个连通块,每次二分第一个和它颜色相同的连通块,缩完后每个点周围的点和它颜色都不同。树的暴力又类似链的暴力加上菊花图的暴力,把树分成奇数层和偶数层,然后询问是否存在某一种颜色,如果存在就二分第一个出现的位置。把缩完点后的连通块随便找一棵生成树后做树的情况即可

T3:考场上只会 S<=64,甚至没有想到先把C传过去

正解逆天,对于每一个Alice控制的位置,先传下一个Alice控制的位置到它的距离(比如第 \(i\) 个位置到第 \(i+1\) 个位置的距离为 \(4\) ,前四轮第 \(i\) 位就传 \(0,0,0,1\)),第 \(n\) 个位置传到第 \(1\) 个位置的距离(循环)。Bob接收时就把每个位置指向的下一个位置找到,建出奇环树找环,但是C也有可能加入迷惑信息,但是无所谓,最后形成的奇环树森林中,Alice传的环一定是最大环。于是我们就用31位有效信息的代价得到了Alice操控的位置。66*31-31=1025,正好剩下1024个数,以及一个数确定 \(S\) 的位数(比如可以钦定Alice传的最后一个0之前的是有效位数)

总结:逆天交互和通信题。虽然正解很难想,但是一些乱搞还是有很高分的,比如T3,不应该直接放弃

5.14

T1:带翻转的队列

T2:CDQ,斜率优化

T3:点分治,CDQ

总分:100+100+0

T1:开始时觉得很简单,看数据范围发现 \(n \le 3e6\) ,思考后写了个带反转的队列,大概1.5h?

询问离线后排序,每次队列反转后加或删一段后缀,询问就在队列上二分,记个前缀和即可

T2:容易读错题,本来不想写double,但是细节太多了,最后还是放弃了

列出DP式子后发现可以斜率优化,但是对点的 \(x\) 坐标有限制,于是使用CDQ

T3:神必复杂度分析题

首先有一个直接的思路是点分治加三维偏序,但是复杂度是 \(O(nlog^3n)\) 的,而且形式不是很好边分治。然后分析一波会发现点分治套CDQ复杂度直接就是 \(O(nlog^2n)\) 的,因为只需要对子树之间算贡献,有点类似全局平衡二叉树

总结:想到啥做法都写一下,万一最后发现复杂度是对的

5.17

打得还行的一场

总分:100+100+100

T1:乱搞或容斥DP

T2:树上差分

T3:手搓,莫反

T1:太过分了,怎么可以放乱搞过

先考虑充要条件,当且仅当每一位都被至少一个0覆盖,且集合中的每个数存在至少一位独占为0。可以DP,\(f[i][s1][s2]\) 表示考虑了前 \(i\) 个数,选出的集合的0已经覆盖了 \(s1\) 这些位,其中 \(s2\) 这些位不能再被覆盖了,转移时枚举哪些位只有 \(a[i]\) 为0。发现会算重,因为如果在最后的集合中,某个 \(a[i]\) 有多个位独占为0,则选择它独占为0的任何一个子集都合法,于是加上容斥系数,\((-1)^{钦定独占为0的位的个数-1}\)

T2:比较简单

发现两条路径相交当且仅当一条路径经过另一条的lca,按照这个树上差分即可

T3:难点在于手玩

手玩 \(m=2,k=2\) 的方案,第一次放

\(+2\ +1\ +2\ +1\ +2\ +1\ +2\ -2\ -1\ -2\ -1\ -2\ -1\ -2\ 0\ 0\ 0\)

如果是返回正数,递归左边,询问

\(+1\ +1\ +2\ -1\ -1\ -2\ 0\)

如果返回负数同理递归中间,如果返回0就在右边询问 \(+1\ -1\ 0\)

可以通过第一次和第二次得到答案的比值推测出具体是哪一个。

发现这类似于一个编号的过程,每一轮给一个编号或不给,同时划分成三段并递归。要求最后每一段内的数的每一轮编号都互质。

之后就简单了,需要莫反一下,可以推出答案式子

\(\sum _{i=0}^m C_m^i\times 2^i \sum_{d=1}^k \mu(d)\lfloor \frac n k \rfloor^i\)

这个好像可以二项式收回去,但是我不会,遂些 \(O(n \sqrt n)\)

5.19

纯纯的赤石

T1:组合数学

T2:线段树,树状数组

T3:多项式多点求值

总分:100+100+20;

T1:简单题,某几个人读错题了

枚举上下都有的列的数量,剩下的可以用组合数学算

T2:一眼很难,实则不太难

直接维护每个位置的值是在多久时被加入的,存成二元组,询问离线后树状数组

T3:纯狗屎,我真以为这是一道神奇的推式子题,最多也就NTT,没想到直接TMD上了个多项式多点求值,这我做NM的,浪费我一个晚自习的时间。

\[\begin{aligned} ans(k)&=\sum_{i=1}^n C_n^i\times f[i] \times \frac 1 {k!} \sum_{j=1}^k (-1)^j \times (k-j)^{n-i}\times C_k^i\\ &=\sum_{i=1}^n C_n^i\times f[i] \times \frac 1 {k!} \sum_{j=1}^k (-1)^j \times (k-j)^{n-i}\times C_k^i\\ &=\frac 1 {k!}\sum_{j=1}^k (-1)^j \times C_k^i \sum_{i=1}^n C_n^i \times f[i] \times (k-j)^{n-i} \\ \end{aligned} \]

我们看后面一坨 $ f(x)=\sum_{i=1}^n C_n^i \times f[i] \times x^{n-i} $ ,其中我们要对 \(x\in [0,k-1]\) 求值,这是一个多项式多点求值

我们把原式写成 \(ans(k)=\frac 1 {k!}\sum_{j=1}^k (-1)^j \times C_k^i \times f(k-j)\) ,这是一个卷积的形式,使用NTT即可

总结:注意读题。多项式的模板需要找个时间写写

5.21

T3很难啊

T1:容斥

T2:DP

T3:SA(SAM),随机二分,线段树,倍增

总分:100+100+0;

T1:\(k\) 很小给了提示

先预处理出答案,考虑每次询问减少了多少个,也就是多少条链经过了至少一个点,容斥哪些点被经过即可,复杂度 \(O(nm+qk^2)\)

T2:正常DP,但是数据范围开的很小,而且数据较水,放了很多奇怪做法过。

\(f[u][v]\) 表示 \((u,v)\) 之间的边已经被设置的最大权值和,转移时移动左右端点即可

T3:很困难的题,考试的时候没想出一点

做法见多做点题

总结:还是太菜了,有些trick没见过

5.24

终于不是老板的题了,和隔壁一起打的NOI模拟赛。

T1:网络流,线段树

T2:正解CDQ,乱搞分块,根号分治

T3:DP

总分:100+40+0

T1:想复杂了,本来以为要利用凸性之类的。总的来说比较顺利,1h做出

考虑先建出最大流模型,再转成最小割,发现给 \(a,b\) 数组排序后,答案是 \(\min_{1\le i \le n,1\le j \le m}\sum_{k=1}^i a[i]+\sum_{k=1}^j b[j]+(n-i)(m-j)\) ,发现 \(i\) 递增,\(j\) 递减,于是在线段树上对 \(i\) 维护最优值即可

T2:看错题目 2h,最后还没写出来

我还以为可以拆散已经拆散的情侣,推了非常非常久,感觉做不了,重读了一边提,发现不能拆散已经拆散了的情侣。想了很久 \(O(n\sqrt n)\) 发现我只会定期重构。赛后想了下发现我的定期重构扔到CDQ上就是 \(O(n\log^2n)\)

T3:赛时没想

暴力DP大概长 \(f[i]=\sum_{sumw[i]-sumw[j]=W}f[j]+\sum_{sumb[i]-sumb[j]=B}f[j]\) 这个样子。然后可以考虑每次新加入一段的转移,上个数据结构维护一下就行了

总结:不要读错题。好像经常会出现定期重构可以换成CDQ的情况,注意观察

5.26

T1:根号分治

T2:SAM,DSU

T3:贪心

总分:100+100+0

T1:数据范围提示是根号做法。大概半小时通过

按变颜色的周期来分块,周期小的预处理答案,周期大的暴力跳

T2:想到SAM后做法比较显然,但是对我而言太难写了,以及题面看漏了,考试最后1min才AC

在SAM上DSU,维护出这个串出现的所有位置,以及相邻位置的距离差。星号个数是 \(\sum min(p[i+1]-p[i],len)\) 。SAM每个点存了多个串,线段树上二分即可。

T3:考试时没时间了,但还是很有趣的一道题

可以把这个问题转化成打怪,左括号加血,右括号扣血,求打完所有的最低血量。有一个经典问题是在树上打怪,解法是按照贪心的策略,每次选择最优的点,和它的父亲合并:即要求打完父亲及父亲更优的儿子之后,先打它。这题只不过变成了两条链。桶排可以做到 \(O(n)\)

总结:数据结构调得还是太久了。这个T3好像比较典,之前也遇到过类似的,记一下

5.28

T1:子集卷积求逆

T2:DP

T3:结论,线段树

T1:不会DAG容斥,想了很久。又不会子集卷积求逆,最终暴力离场

把式子写出来后发现是一个子集卷积,有点像分治NTT的形式,子集卷积求逆解决

T2:奇怪题目,场上还以为是meet in the middle

正解是发现两倍关系的链长不超过log,于是把链长为 \(1\sim6\) 的链数全部设进状态里,再对原问题容斥一下,发现复杂度可以通过

T3:场上猜结论拿了80分,后来做T1去了,没有继续优化

发现若干个区间合法的充要条件是,把所有区间右端点看成 \(n\) 和把所有区间左端点看成 \(1\) 同时合法。然后就是数据结构了,线段树上二分啥的可以做到单log

总结:不太会做一写比较乱搞的题,思维不够发散(T1赛时过的人基本都是乱搞)

6.2

前一天晚上在给自己的题写交互库,2:30才睡,所以比赛开始后昏迷了1h。还是得早点睡觉啊

T1:决策单调性,区间第k小

T2:找性质,博弈

T3:???

总分:100+10+0

T1:在错误的方向走的比较久,一直在想凸包之类的。发现右端点单增时就做完了。耗时大概1.5h

转化成找一个右端点,使它的前缀和减2*前缀前 \(k\) 小最大。发现 \(k\) 单增,决策的右端点单增,于是CDQ加主席树

T2:考场上想出了一些性质,但缺少一些转化,导致做不了

稍加推导可得:Alice每次一定选相邻的01,Bob每次一定选第一个0和最后一个1(这就是我场上想到的全部了);删去一些字符,答案不会变大;将10交换成01,答案不会变小。

题解表示,可以想到钦定某些位置为Alice和Bob最终取出的位置,把这些位置拿出来,看是否能找到一种策略使这些位置全部取完。这个check就是一个类似括号匹配的问题。至于钦定哪些位置,首先一定得是一个合法括号匹配,其次0靠前,1靠后。所以取前k个0和后k个1即可。k需要二分

T3:赛时没认真思考

现在也不会

总结:未发现性质,对题目缺少转化

6.4

T1:构造,猜结论

T2:数学

T3:点分治,贪心

T1:赛时队长很快通过了,猜测是CF题,发现原树的非叶子一定会变成叶子,然后就做完了
T2:赛时式子好像推得特别复杂,很久才推出了最后的形式。而且当时推完已经神志不清了

题解太长了,放在多做点题里

T3:竟然是原题!

好像写过题解?首先发现出发日期要么是第一天,要么是最后一天。然后是一个邻域转移的最短路。过程类似dijstra。对于走只走树边的情况,直接点分树上邻域修改,对于走非树边的情况,因为非树边很少,可以暴力BFS

总结:数论能力有待提高

6.6~6.10

高考期间的比赛,因为打得太随意,感觉没有获得什么比赛上的心得,有一些做题技巧,遂放在多做点题里

6.14

天天会考复习,这周都只打了一场模拟赛

T1:背包

T2:lct

T3:树剖,平衡树,并查集

T1:想得复杂了。推了两个小时奇怪的东西,最后发现一开始的结论好像就可以做。然后又打暴力,调了很久,以为结论假了,结果实际是暴力假了……

首先肯定是先抽再买,其次假如当前还有 \(x\) 张牌没有被抽到,抽到这些牌中的的一张的期望次数是 \(\frac n {x}\)

暴力DP \(f[s]\) 表示 \(s\) 内的卡片还没有取到,要取完所有卡片的期望花费:

\[f[s]=min(\sum_{i\in s } a[i],\frac {nb}{|s|}+\frac {\sum _{i\in s}f[s\textbackslash i]}{|s|})\\ \frac {nb}{|s|}+\frac {\sum _{i\in s}f[s\textbackslash i]}{|s|} \le \sum_{i\in s } a[i]+\frac {nb-\sum_{i\in s } a[i]}{|s|} \]

所以如果 \(nb\le \sum_{i\in s } a[i]\) ,则会一直抽。

于是猜测 \(nb\le \sum_{i\in s } a[i]\) 是下一次抽的充要条件(赛时猜的结论就是这个)。其实这个很有道理,可以看作当且抽的代价小于剩下卡牌的平均价格。题解看作以剩下卡牌的平均价格购买随机一张卡牌。

反正这个结论是对的,于是我们只需要对所有 \(nb > \sum_{i\in s } a[i]\) 的终止状态进行贡献统计。这个需要枚举是最后一次抽到的是哪个元素。其他的贡献背包一下就可以了,复杂度 \(O(n^3V)\)

T2:赛时没太认真想

有一个重要性质,答案等于 \([l-1,l-1]\)\(lca([l-1,l-1],[r+1,r+1])\) 的路径上的左儿子数量+ \([r+1,r+1]\)\(lca([l-1,l-1],[r+1,r+1])\) 的路径上的右儿子数量-2,其中 \([l,r]\) 表示区间为 \([l,r]\) 的点。然后就可以用lct维护了。我发现lct其实挺好写

T3:赛时没太认真想

有一些很逆天的性质,比如说所有时刻的宝石构成的虚树的叶子数之和是 \(O(n)\) 级别的,用这些性质可以 \(O(nlogn)\) 地过掉。但是这么做好像做不了加强版。

加强版(Luogu P1999)本质是动态加点,考虑树剖。经过一波势能分析发现所有时刻有,有宝石进入或移出的链条数的和是 \(O(nlogn)\) 级别的(详见洛谷题解)。每次可以枚举所有有宝石的链,再用splay之类的东西维护一下区间平移。

总结:数据结构能力有待提高。充分利用发现的性质,注意打暴力不要打错

感觉赛时经常卡在某些题上,甚至没看完所有题

6.19

T1:猜结论

T2:分讨

T3:多项式

T1:赛时乱写了个东西,结果是对的。卡了很久的常才过

我写的是先选最大的 \(n\) 个数,然后从大到小扫,如果某个数可以变成它的某个因数就变。复杂度 \(O(n\ln n)\) ,用vetor还会被某个oj卡常……

T2:纯模拟题

手玩一下可以得到把一个区间消空的条件和构造方法。选择三个连续的颜色不同的节点作为三角剖分的一个叶子,再把剩下的点当作区间删空即可

T3:赛时没时间了,实则不太难

\(f[i]\) 表示有编号无向连通图个数,\(g[i]\) 表示奇数边有编号无向连通图个数

\(g[n]=2^{(^n_2)-1}-(^{n-1}_{n-2})g[i-1]-\sum_{i=1}^{n-2}(^{n-1}_{i-1})\times f[i] \times 2^{(^{n-i}_2)-1}\)

\(f\) ln 出来后递推即可,但是会被某个oj卡常

董老师教了个神必做法

首先对所有图的方案数求ln得到联通图的方案数,然后把一个图的权值看作-1的边数次方,所有图的的权值和的意义是 偶数条边的图的方案数 减 奇数条边的图的方案数,对所有图的权值和求ln,得到的是 联通的偶数条边的图的方案数 减 联通的奇数条边的图的方案数。这个和上面那个加减一下,即可得到 联通的奇数条边的图的方案数 或 联通的奇数条边的图的方案数。

考虑边数 %3 等于 0 怎么做。实际上这是一个单位根反演题目

总结:不太会猜结论。模拟题写的有点慢

6.24

T1:构造

T2:乱搞

T1:太困难了,从队长的暴力得知答案是 \(2^{n-1}\) ,硬玩 30min 构造出解法

首先上界显然是 \(2^{n-1}\) ,因为对于两个图,如果有一个点的边集相同,则异或起来这个点就与其他点没边了。然后假如已经递归构造出了 \(n-1\) 的解法,考虑拓展到 \(n\) 。一个直接的想法是先把 \(n-1\) 的所有图copy一遍,然后在通过排列 节点 \(n\)\(2^{n-1}\) 种不同的边集来满足条件。对于copy的两个图,节点 \(n\) 的边集必须互补;对于其他情况,异或后 \(n\) 到其他点至少有一条边。递归构造即可

T2:想到了一下乱搞,但是没写

标程被乱搞c爆了

正解是整体二分

考虑一个在随机数据下非常优的乱搞,花费<1的那种。比如每次选择所有位置不正确的数。于是只需要花费<1地打乱给定排列即可。这个和上面那个问题本质相同,可以先随机一个排列并用上面的暴力还原,再把对这个随机排列的操作搬到给定排列上就可以打乱了!n=8000 的数据花费只有 1.76!

总结:构造题好困难啊。乱搞能力有待提高
posted @ 2025-06-25 16:56  zhuzc_114514  阅读(31)  评论(1)    收藏  举报
Title