互测记录
有分了不起,开机夸自己!
2023.10.29 Round 1
看 T1,不会;看 T2,发现不是我能做的题;看 T3,网络流计数,感觉也做不了。
那么只能做 T1 了!做做做,不会一点!破防了。
最后没有写代码,以为大家都会 T1,最后好像只过了 \(20\) 多个。
A 优惠购物
初始钦定不用优惠券,此时最后会剩下 \(\sum a_i\) 个优惠券。用优惠券,新增的优惠券会减少。考虑一边用优惠券,一边使得减少的优惠券最少。
分析一下 \(i\) 的减少量:
- 第一阶段:前 \(a_i\bmod c\) 次使用,减少 \(0\)。
- 第二阶段:使用 \(c\) 个,减少 \(1\)。
- 第三阶段,使用 \([0,c)\) 个,减少 \(1\)。
从性价比的角度分析,第一阶段 \(>\) 第二阶段 \(>\) 第三阶段。
对于第一阶段,从后往前贪心。
对于第二阶段,从后往前贪心。
对于第三阶段,假设 \(s_i\) 为 \(i\) 剩余可以支配的优惠券数量,\(h_i\) 表示已经选了的数量,我们希望每次选优惠券数量最大的,这样剩余最小。那么 \(i\) 可以选的数量为 \(\min(b_i-h_i,s_i,\min_{j>i}(s_j-1))\),我们希望每次找到这东西的最小值。直接维护是做不了的,但是发现后面两项 \(\min\) 有单调性,所以可以把 \(b_i-h_i\) 从大到小排序,每次加入所有大于 \(b_{i-1}-h_{i-1}\) 的数,这个用堆不难维护。
B 树哈希
不会数学。
C 网格图最大流计数
不会线性代数。
2023.10.29 Round 2
开场看 A,猜 DP 的时候只需要记录一对 \(i,j\) 使得 \(a_i<a_j\),那就记录最大值和最大值前面一个最大值试试,发现不对,不过发现只要保证后面接一个合法的段就好了,是一个类似区间 DP 的东西。写一下发现 \(80\),把算答案改成 \(\mathcal{O}(n)\) 就过了。
看 B,不会一点,但是找规律发现了 \(lim_i=i\) 是 \(\binom{n+1}{2}+1\),思考这是为什么,发现不知道是为什么。
看 C,怒砍了 5 分。
看 B,发现 \(lim_i\leq 5\) 可以只搜前 \(10\) 个,剪枝之后过了 35。
最后 100+35+5=140。
A 序列
考虑 DP。按照前缀最大值分段,每次找到最后一个前缀最大值和倒数第二个前缀最大值,分别设为 \(p,q\),那么 \([p+1,n]\) 是一个值域在 \([a_p,a_q]\) 之间的段,并且可以发现最大值前和最大值后是独立的。据此转移,设 \(f_{i,j}\) 表示长度为 \(i\),值域为 \(j\) 的序列数量。转移是 \(f_{i,j}f_{x,y-j+1}\to f_{i+1+x,y}\),其中 \(y\) 是最后一个前缀最大值,\(j\) 是倒数第二个前缀最大值,这样是 \(\mathcal{O}(n^2m^2)\) 的。考虑钦定序列满足 \([0,j]\) 中所有数都出现过,那么答案就是 \(\sum\binom{m+1}{j+1}f_{n,j}\),稍微修改一下转移就好了,复杂度 \(\mathcal{O}(n^4)\)。
B 没有创意的题目名称
先明确一下合法条件:
- 对于 \(i+j\leq n\),\(f_i+f_j>n\)。
- \(f_{i+j}=f_{f_i+f_j}\)。
打个表发现序列的一段前缀是 \(0\sim i\),一段后缀有循环节。
考虑循环节是为什么。假设 \(f_{i}=f_j=x\),那么有 \(f_{k+i}=f_{k+j}=f_{f_k+x}\)。所以假设第一个 \(p\) 是最小的 \(p\) 使得存在 \(q>p\) 满足 \(f_{p}=f_q\),那么对于 \(i>p\) 有 \(f_i=f_{i+q-p}\),即循环节长度是 \(k=q-p\)。
考虑前缀是为什么,令 \(f_0=0\),根据上面的理论,\(i<p\) 的所有数是互不相同且唯一的,在 \(f_0=0\) 的情况下,\(f_i=f_{f_i}\),由于是一一映射的关系,所以 \(i=f_i\)。
所以对于 \(i\geq q\),我们有确定的填法,对于 \(i<p\),同样有确定的填法。问题在于解决 \(p\leq i<q\) 的问题。下面我们分类讨论 \(f_0=0\) 和 \(f_0\neq 0\)。
先讨论 \(f_0=0\) 的情况。我们探讨上面的条件是否是充分的。对于 \(i\geq p\),有 \(f_i=f_{(i-p)\bmod k+p}\),同时有 \(f_i=f_{f_i}\),不难发现 \((i-p)\bmod k+p=(f_i-p)\bmod k+p\),所以显然有 \(f_i\equiv i\pmod k\),用这个等式带入 \(f_{i+j}=f_{f_i+f_j}\) 不难证明条件三。但是条件二未必满足。先推一些必要条件:
- 对于所有 \(2i\leq n\) 需要满足 \(2f_i\leq n\),如果 \(q-1\leq \lfloor\frac{n}{2}\rfloor\),那么它是充要的。
- \(f_i+f_{n-i}\leq n\),因为 \(p\leq i<q,f_i\neq 0\),所以 \(f_i\geq i\),可以推出 \(f_i=i\)。
所以它充要了。也即:\(q-1\leq \lfloor\frac{n}{2}\rfloor\),只需满足 \(2f_i\leq n\),否则,\(f_i=i\)。枚举 \(k,p\) 可以平方计算。
再讨论 \(f_0\neq 0\) 的情况,那么 \(f_{2f_0}=f_0\),有 \(p=0,k\mid 2f_0\)。分类讨论 \(k\mid f_0\) 和 \(k\nmid f_0\)。
如果 \(k|f_0\),考察 \(f_{i+0}=f_{f_{i}+f_{0}}\) 仍然有 \(f_i\equiv i\pmod k\)。因为 \(f_i>0\) 所以不会出现 \(2(k-1)>n\) 的情况。考察 \(f_i\) 的最大值,发现可以取到 \(k\),于是 \(2k\leq n\),此时只需要满足 \(2f_i\leq n\) 即可。
如果 \(k\nmid f_0\),说明 \(2\mid k,\frac{2}{k}\mid f_0\)。继续考察 \(f_{i+0}=f_{f_i+f_0}\) 有 \(f_i\equiv i+\frac{k}{2}\pmod k\)。那么 \(f_i\) 的最大值会是 \(k-1\),所以 \(2(k-1)\leq n\),仍然只需要满足 \(2f_i\leq n\)。
于是直接乘起来计数即可。复杂度为 \(\mathcal{O}(n^2)\)。
C 傅里叶与交通规划
摆了。
2023.11.5 Round 3
雅礼两周一次的假在今天。
A Permutation Counting 2
首先 \(x\) 个上升意味着有恰好 \(n-x\) 个上升段。
容斥,钦定原排列和逆排列有 \(x\) 个上升段和 \(y\) 个上升段,尝试每次填一个逆排列上升段。注意到我们填的位置一定是原排列上升段的一个前缀,每次填数相当于往前缀后加数。尝试设 \(a_{i,j}\) 表示逆排列内第 \(i\) 个上升段给原排列 \(j\) 个上升段加了 \(a_{i,j}\),那么矩阵 \(a\) 的限制是:
- 和为 \(n\)。
- 不存在任意一行或者任意一列的和为 \(0\)。
容斥插板计算即可。复杂度 \(\mathcal{O}(n^3)\)。
怎么计数只会 DP 了,未必所有题都可以 DP 做,可以尝试转化计数新的对象。
B 化学实验
不会写 LCT
C 物理实验
不会数学
2023.11.6 Round 4
开场看 T1,感觉是个流题。推了推感觉很有感觉啊!然后就会了点数和边数都是 \(\mathcal{O}(q)\) 的流做法。写一发发现 60,把 SPFA 换成 dijkstra 还是 60。
然后因为 \(m\leq 15\),感觉是什么高妙反悔贪心题,我又恰好不会反悔,于是拼了个 \(m=2\) 跑路了。
看 T2,不想做,5 分跑路。
看 T3,发现会第一问,然后想了想,感觉会 DFS 序为 \(1\sim n\) 的第三问,写一下发现假了,还要做个第二问。然后做了下第二问,想到了一个二分 DP 做法,写写写,发现细节好多。机房好吵。写不完了!摆烂!
出榜发现大家都会 T1,看了眼 T1 题解,然后破防了。
感觉对这种高强度的比赛还不是很适应啊,稍微不注意就少了好多分。我好菜呜呜呜。
A 数据库
把所有修改分成两类:
- 需要保存到下次修改该颜色,此时它占用的位置的时间区间为 \([pos_i,pos_{i+1})\)。
- 改完就不管了,此时它占用位置的时间区间为 \([pos_i,pos_i]\)。
要求每个位置被覆盖的次数不超过 \(m\) 次。
很像志愿者招募。利用下面的方式建图:
- 建立一排点 \(i\to i+1\),流量为 \(m\),边权为 \(0\)。
- 对于每个颜色,建立一列点,其中第 \(j\) 个点向 \(pos_{i,j}\) 连边,流量 \(1\),费用 \(0\);\(pos_{i,j}+1\) 向第 \(j+1\) 个点连边,流量 \(1\),费用 \(w_i\)。其中 \(pos_{i,j}\) 为第 \(i\) 种颜色第 \(j\) 次出现的位置。
直接跑费用流即可,复杂度 \(\mathcal{O}(nq\log q)\)。
这个做法还没有通过。
upd:小丑了,虽然硬流是能做的,但是志愿者招募的复杂度更优秀,是 \(\mathcal{O}(mq\log q)\) 的。
B 左蓝右红
直接做完全不可做,需要找一些高妙结论。
把整个平面分成若干块,有一些必要条件:
必要条件一:边相邻的两个区域必然有一个无色。
证明考虑奇偶性,由于没有两个矩形有公共边,所以经过一条边必然改变覆盖次数的奇偶性(更准确的,覆盖次数会恰好变化 \(1\)),所以覆盖次数不会同时为奇数。
必要条件二:点相邻的两个区域不同色
证明考虑公共点,如果同色,那么它会有四条同色出边,而因为矩形的染色是蓝红相间的,所以每个点应该恰好有两条蓝色 / 红色出边,矛盾。
上面两个条件实际上已经是充分的了。
考虑判断合法,扫描线判断。对于一个横坐标区间,图形由偶数条横向的线段组成,其中第 \(2k-1\) 和 \(2k\) 条直线之间的区域是有颜色的。那么条件是:两条线段必须同色,并且,如果一些直线穿过了一条纵向线段,那么直线的颜色会改变。
注意到条件是等价关系,所以可以维护每条直线与哪些矩形的左下角颜色相同,利用扩展域并查集即可做到平方。
进一步观察,如果一些直线穿过了矩形的左侧线段,那么区间内直线的对应关系会改变(横线编号奇偶性改变),简单推导等价关系可以发现,穿过这条线段的所有直线颜色都相同。所以可以利用连续段均摊维护限制,复杂度 \(\mathcal{O}(n\log n)\)。
写起来有点麻烦,放个代码在这里。实现思路是先处理区间推平,然后对于端点特殊考虑其配对的线段。code
C 世界沉睡童话 70p
step 1:刻画点运输的路线
不妨令被删掉的边为黑色,其余边为白色。
从局部信息入手。对于 \(u\),先依次遍历它的所有儿子,如果儿子中有黑色,停止遍历,直接交换。然后遍历其父亲,如果边为白色,停止遍历,否则将点移动到其父亲。移动到其父亲之后,依次遍历它的所有右儿子,如果有边是黑色,停止遍历,否则继续遍历……依次类推,可以找到其最终位置。
从终点推起点的方式也是类似的,对于一个终点,判断另一个点是否为其起点的方法也是简单的,只需要判断路径上的每条边是否为能够使遍历继续的“预期颜色”,那么终点边和预期颜色不同,其余边和预期颜色相同。
step 2:解决问题
上面的操作可以导出一个平方做法。维护部分染色方案,边为 黑 / 白 / 未染色 三种状态。分两步解决问题:
-
找到答案与 \(p\) 的 LCP:从 \(i=1\sim n\) 依次遍历。对于每个点,暴力找到其合法的起点集合,如果起点集合存在数大于 \(p_i\),那么它可以成为第一个比 \(p_i\) 大的元素,\(i-1\) 可以成为 LCP。计算合法集合之后,执行 \(\text{fix}(i,p_i)\),表示令 \(i\) 的位置交换成 \(p_i\),并将沿途的所有点染成对应颜色。如果出现矛盾,直接跳出循环即可。
-
还原方案:假设 LCP 长度为 \(l\),对于 \(i=1\sim l\),执行 \(\text{fix}(i,p_i)\),对于 \(l+1\),找到集合中比 \(p_{l+1}\) 大的最小的数 \(pos\),执行 \(\text{fix}(l+1,pos)\),对于后面的所有数,找到合法集合中最小的数并执行 \(\text{fix}\) 即可。
暴力实现是平方的,相信大家都很会重链剖分,可以优化到 \(\mathcal{O}(n\log^2 n)\)。放一下我写的石山 code,大致思路是分轻重儿子维护预期颜色,\(\text{fix}\) 操作用并查集找到未染色的颜色暴力染色。
2023.11.7 Round 5
开场看 T1,很有感觉啊,但是只会 \(\mathcal{O}(nm^2+qm\log n)\),感觉不太过得去的样子。想了半个小时也没什么思路,那先写一下赶紧看后面的题吧,怎么说也能过 \(10^5\) 和 B 性质
个屁啊,写完只有 10pts,B 性质 T 掉了(B 性质复杂度是 \(\mathcal{O}(qm\log n)\)),sub4 WA 了。但是我大样例过了啊。想着做这么久不能只有暴力分吧。那我上个拍子,但是拍子没挂。感觉是大数据 UB 什么的,然后还真查出来几个,交上去之后还是只有 10pts。
上头了,一个 T1 你能秒我?因为之前写法空间爆了,换了个空间更小的写法,但是还是寄了!
奋斗 3h 只有暴力分,感觉难受。看 T2,发现可以贪心求 \(f(p)\),然后发现直接 DP 就行了。原来签在 T2 啊,写一下 WA 了,拍一下查了个错,就过了。
群里听说 T1 锅了,难绷。
然后头晕的不行,写 T3 的 10pts 就下班了。
回去发现 T1 数据修好了,但是没交,交上去应该有 35。
感觉 11 点开 T2 还是比较寄的,当时脑子都糊涂了,想题开题开始要趁早。
A Xor Master
结论:\(g(x\oplus y,S)=g(x,S)\oplus h(y,S)\),其中 \(h(y,S)\) 表示 \(y\) 与 \(S\) 一个子集的异或最小值。证明考虑求异或最小值的过程,如果线性基中某一位有数,那么 \(g(x,S)\) 这一位一定是 \(1\),\(h(y,S)\) 这一位上肯定是 \(0\)。异或起来一定是 \(1\),实际上与求 \(g(x\oplus y,S)\) 的过程一致。
那么可以做到 \(\mathcal{O}(nm^2+qm\log n)\)。因为有上面的结论,可以线段树拆位维护异或值,改变 \(S\) 的时候暴力重构,最多只会重构 \(m\) 次,单次重构 \(\mathcal{O}(nm)\)。
考虑优化单次重构,可以用一个套路:把线段树上每个节点中维护的 \(m\) 个值写成二进制的形式,形成一个 \(m\times \log len\) 的矩阵,然后我们转置这个矩阵,维护 \(\log len\) 个二进制数,然后用位运算模拟二进制加法,因为每一位是独立的,所以为压位提供了可能性。所以复杂度变成了 \(T(n)=2T(n/2)+\mathcal{O}(\log n)=\mathcal{O}(n)\)。所以最后复杂度为 \(\mathcal{O}(nm+qm\log n)\)。code
B 栞
考虑怎么求 \(f(p)\),假设我们已经确定了 \(q_{1\sim l-1}\),当前是第 \(j\) 次分割。那么这次分割的右端点最大是 \(n-(k-j)\),当然可以直接操作 \([l,n-(k-j)]\),但是我们希望每次分割的长度尽可能短,所以我们找到最短的分割,使得其前缀和分割 \([l,n-(k-j)]\) 的前缀相同。这相当于找到排列的第一个“值域断点”,也即:断点之前任意数比断点之后任意数小。所以每次找到端点即可线性求 \(f(p)\)。
因为求 \(f(p)\) 的方式非常简单,考虑 DP。设 \(f_{i,j}\) 表示左端点为 \(i\),当前是第 \(j\) 次分割的方案数。那么要求 \([i,n-(k-j))\) 这一段数比前一段整体要大,\(n-(k-j)\) 没有限制。这说明一件事情:如果 \(q_i<q_{i-1}\),且 \(i-1\) 之前递增,那么 \(i\) 一定是一个左端点,且右端点为 \(n-(k-j)\),后面的分割方式是唯一的。所以找到第一个 \(q_i<q_{i-1}\) 的位置 \(pos\),对于前面的 DP,每次拼上一个没有断点的排列(设长度为 \(n\) 的没有断点的排列为 \(g_n\),容斥容易转移),然后枚举以 \(pos-1\) 为右端点的段和它是第几段,判断值域的限制,然后直接累加进答案。复杂度是 \(\mathcal{O}(n^3)\) 的。
C 数据结构
不会数据结构。
2023.11.9 Round 6
好难,不会,摆了。
2023.11.11 Round 7
开场三个题都看了一下。先开 T2。
然后发现我会做链的平方。然后发现如果按照 BFS 序插点就可以满足链的性质了。写了一个平方上去拿了 40。
然后发现反演一下套一个多点求值就做完了,但是我不会多项式,然后摆了。
看 T1,想了一下发现会排列的平方对数,写一个上去发现平方对数过了 10000,很震撼。然后又想了一下发现会了非排列的平方对数,写一发发现只有 40。然后会了平方,写一下发现还是只有 40。然后卡了半天常都过不去。最后把一个前缀和直接用树状数组求,它过了.jpg
然后写了个 T3 暴力下班了。
群里面讨论了一下,我,ya,zyf 三个人分数一模一样,怎么回事呢。
关于题目:摆了!!!
2023.11.12 Round 8
感冒了,摆了。
看起来好难,这就是 nfls 的实力吗。
2023.11.14 Round 9
上去去看了一下医生,11:00 才回来。看了眼 T1,感觉广义串并联图,问题是我并不会写这个东西。看 T2,不想看了。看 T3,反正肯定是我不会做的题。然后开摆了。
怎么这么摆啊。
然后 T3 过了一车,看一下也会了,怎么倒着放啊。
C Tree Topological Order Counting
存在一个 \(\mathcal{O}(n^3)\) 的做法:
枚举点 \(u\),令 \(f_{x,i}\) 表示 \(x\) 子树的排列,\(u\) 的位置在第 \(i\) 个的方案数。每次可以平方转移。
注意到这个做法最后都会在相同的终点 \(f_{1,i}\) 统计答案。考虑倒着做。设 \(g_{u,i}\) 表示状态 \((u,i)\) 在最终状态中的系数。初始化 \(g_{1,i}=b_i\),然后倒着转移,就做完了。可以实现到 \(\mathcal{O}(n^2)\)。code。
题解给出了一种神秘构造使得我们可以求出 \(f_{x,y}\) 表示 \(a_x=y\) 的排列数。考虑一个过程:
- 点有黑白两种颜色,初始所有点都是白色。每次选择一个白点,然后把其祖先中最浅的白点给染黑。假设第 \(i\) 次被染黑的节点是 \(u\),我们令 \(a_u=i\)。
显然所有排列的数量是 \(n!\) 级别,且从数的拓扑序到这个过程具有良好的映射关系:一个拓扑序恰好对应 \(\prod sz_i\) 个排列。
所以可以直接计数这个排列,然后把答案除以 \(\prod sz_i\)。设 \(ans_{x,y}\) 表示 \(x\) 节点在第 \(y\) 次被染黑的排列数量。固定 \(x\),并设 \(f_{i,j}\) 表示染黑 \(i\) 个节点之后,最浅的没有被染黑的儿子是 \(j\),直接转移可以做到三方。但是可以注意到如果 \(u,v\) 的 \(j\) 阶父亲是相同的,那么 \(x=u\) 和 \(x=v\) 的时候 \(f_{u,i,j}=f_{v,i,j}\),所以状态数降到了平方,只需要记录点数和最浅的儿子即可。
什么诡异双射,记住了。
2023.11.16 Round 10
最小丑的一集。
看 T1,ptsd 了。然后也不太会这种题。先看 T2,发现也不会,但至少有 80 的点分治分。写一手点分治,但是太久没写数据结构了,写了 2.5h/px 什么码力。
然后没啥时间了。给 T3 写了个 20,因为不太会博弈所以继续回来看 T1。但是还是不会做,因为时间不多了,然后 T1 暴力还没写,所以心态有点炸,脑子一直是糊的。最后弃疗了,直接写暴力下班,然后暴力还写挂了/cf
然后比较精彩的是,我中午休息一会回来重新看 T1,发现之前猜的一个结论(每一层按照高度排序之后相邻两个数合并)看起来非常真。然后这个结论套 AGC009E 就可以得到一个平方做法。写完 75p,改成滚动数组后直接过了???
啊啊啊啊啊啊啊啊啊啊啊啊啊
感觉还是做题没有自信的问题,最优化题讲究一个自信即巅峰。
A 雷同
先刻画一下最后的答案:假设第 \(i\) 个点在二叉树合并的时候深度是 \(dep_i\),那么答案是 \(\sum w_idep_i+\sum (2^{l_i}-1)\),其中 \(l_i\) 是点 \(i\) 高度较小的儿子的高度。
你发现 \(w_i\) 与答案的关系仅仅在于深度。考虑枚举深度序列,计算对于确定的深度序列的最优答案。把合并看成一个这样的过程:每次把同一层 \(2k\) 个结点两两配对,然后删掉其中高度较小的数,加上贡献,并把高度较大的数高度 +1 之后传上去。那么我们肯定希望删掉的尽可能大,所以删除策略一定是按照高度排序之后相邻两个数配对,然后删除其中一个。
注意到一个节点被删除的时间是可以确定的,因为这相当于每次把所有偶数提取出来,把奇数删掉,所以在排名为 \(j\)(0-index)的数被删掉的时间是 \(\text{ctz}(x)\) 轮,其中 \(\text{ctz}(x)\) 为 \(x\) 末尾 \(0\) 的个数。所以设计 DP 状态 \(f_{i,j}\) 表示一共放了 \(i\) 个点,同层有 \(j\) 个点的最小代价。每次要么同层加一个点,要么进入下一层,贡献是容易计算的,复杂度为 \(\mathcal{O}(n^2)\)。
2023.11.28 Round 16
上完 whk 回来了!!!
看 T1,会了 \(a_i\leq 11\),随便写了一下过了样例,交上去 \(0\) 分。写暴力,暴力 T 了。拍拍拍,调调调,拍拍拍,调调调,一个小时的时候才过 \(a_i\leq 11\)。
然后感觉 B 长得很小清新,感觉像签到题,但是完全不会做构造,只会前三个包,想想想,根本不会,破防了!
然后弃疗开始写,写完看 T3,但是根本不想做,随便拼了点包,A 性质被我瞎搞过了第一个包。
然后回来看 A,编了个策略,感觉能过 \(a_i\neq 1\),写写写,拍拍拍,调调调,拍拍拍,调调调,然后过了。
斩获了整整 63 分,然后一点不会,下班!
发现 B 没人过,失策了。
A 最后的晚餐
暴力可以做到 \(\mathcal{O}(3^{(n+12)/3})\)。
先考虑 \(f(A)\) 的求解方式。
对于 \(a_i\leq 11\),有策略:
- 如果当前前缀和末尾不是 \(9\),那就放 \(11\)。
- 否则,如果存在,任意选择一个数放上去。
- 否则,放 \(11\)。
、
直接 DP 可以做到平方,但是 \(f(A)\) 存在更简单的形式。如果到不了 1.2,那么可以取到上界 \(S/10\),其中 \(S\) 是所有数的和。否则,可以取到另一个上界 \(n\)。于是,答案是 \(\min(S,n)\)。
\(a_i\leq 12\) 的问题在于 \(1\) 未必能够完成进位。如果只有偶数和 \(1\),则答案有上界 \(n-c_1/2\)。扩展这个结论,注意到只有奇数能够改变奇偶性,所以 \(1\) 如果想进位,必须和另外一个奇数配对。于是可以找到答案上界 \(n-\max(0,c_1-c_3-\cdots- c_{11})/2\)。
以下给出构造:
- 如果当前前缀和末尾小于 \(8\),那么有 \(12\) 则放 \(12\),否则使用上面的策略。
- 如果当前前缀和末尾等于 \(8\),那么:
- 如果有偶数,放偶数。
- 否则,放 \(11\)。
- 否则,放任意奇数。
- 否则,放 \(1\)。
- 如果当前前缀和末尾等于 \(9\)。
- 如果有 \(1\),放 \(1\)。
- 否则,放任意奇数。
- 否则,放 \(11\)。
随后可以 DP 解决。求出 \(h_1(x,y)\) 表示偶数中选了 \(x\) 个数,和为 \(y\) 的方案。\(h_2(x,y)\) 表示奇数个数减去 \(\max(0,c_1-c_3-\cdots- c_{11})/2\) 是 \(x\),和为 \(y\) 的方案数,需要计算:
把后面的式子的 \(x+z\) 提出来,再通过讨论 \(y\bmod 10+w\bmod 10\) 与 \(10\) 的大小关系,即可拆开暴力枚举,时间复杂度 \(\mathcal{O}(n^2)\)。code
2023.11.30 Round 17
最后一把。
开场锁定 T2,想了半个小时发现会了 A 性质和 B 性质的麻烦做法,又想了一会发现 B 性质有好写一点的做法,只不过还是有点麻烦。先看看别的题。
看 T1,发现会用 \(2\) 的幂构造,然后就不会了/cf
看 T3,感觉非常混乱,编了个平方跑路了。
然后回来编 T2,暴力和 A 过得飞快,写 B 的时候发现好写做法假了/fn
急急急,然后又编了个做法,还是假的。绷不住了。
不过最后还是修出来了,修完直接摆烂了!
A 棋盘
感觉憨憨,可惜我不会构造/cf
最简单的构造是构造 \(2\) 的幂次。然后你其实可以考虑转化进制,构造出来 \(3\) 的幂次和 \(6\) 的幂次,比 \(2\) 的幂次优一点。
然后正解的构造是构造斐波那契数列,大概是先放两格,然后不停在外面围 \(4\) 个各自,然后求一下 \(k\) 的斐波那契拆分就好了。

浙公网安备 33010602011771号