总结
复健模拟赛
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的,浪费我一个晚自习的时间。
我们看后面一坨 $ 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\) 内的卡片还没有取到,要取完所有卡片的期望花费:
所以如果 \(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!

浙公网安备 33010602011771号