250416 模拟赛
Atcoder 神题赛!
T1
给树上每个点到其他点的距离和,构造这棵树。
第一眼反着我会,然后不会了。准备摆但是没摆然后开始猜结论先是猜到所有距离和不同的用处是一个节点没有两个及以上同构子树,然而没有什么用处(好像可以在排序的时候减少一些讨论?)。我猜距离和最大的一定是叶,然后考虑换根求距离和的过程,把这个过程反过来,\(dis_x-(n-2\times siz_x)\) 应该就是 \(x\) 的父亲的距离和。然后把点按距离和排序找父亲就好了。但是怎么判无解呢,我不会,所以我把这个树又存了一遍然后再算一次。交上去无意拿下首杀。??
T2
一个初始 \(a_i=i\) 的序列,做不多于 \(k\) 次操作之后使它变成一个给定的序列 \(P\),每次操作从最后选择 \(k_i(0\le k < n)\) 个元素插到前面(可以分开),操作代价为 \(k_i\times c_i\),求最小总代价或者判断无解。(\(2\le n\le 100,1\le k\le100\))
旁边的 dalao 太神了一眼切此题。想了一上午奇怪的做法比如网络流(?),后来想会不会是 dp 牙,但是不会设状态。然后乱搞结果又做出来了(?)。首先显然这 \(k\) 次操作都会做,然后反过来做,也就是把 \(P\) 序列排序是更好想的。设 \(f_{t,i,j}\) 为进行到第 \(t\) 次操作,当前 \([i,j]\) 的一段数在序列中的位置是对的的最小总代价,初始状态是 \(f_{k+1,x,y}=0\),其中 \(x,y\) 为每一段最长的排好序的区间左右端点,其余为正无穷。目标为 \(f_{1,1,n}\),转移枚举断点加上后边那段长度贡献就出来了。一开始感觉非常的假但是造几个样例手推一下就发现其实是对的。
T3
题面太长了。
显然只会跳 \(\log V\) 次。一开始以为骆驼只会从左往右跑,然后再跑回最左边,然后二分(后来发现不能二分阿,但是用别的什么比如主席树好像行)这题就做完了,看了一眼样例发现不对。但是得到提示,发现每次跳到一个阶段,它的地图分成若干块,然后反正就是要从第一层出发看有没有一种方案是可以经历过的块覆盖整个区间。然后满脑子建图跑。但是很不对,然后又想会不会有一些类似根号分治的玄学做法,发现除了最多跳的次数之外没有限制了貌似。
看了题解,说分成 \(\log V\) 层之后可以状压,\(ll_s\) 表示在 \(s\) 内选的层中选有 \(1\) 块,最多从最左边向右覆盖到哪里,\(rr_s\) 同理,最后枚举每一个第一层的块和所有状态(这里还有一点,就是第一层块数如果大于 \(\log V\) 块就是全部无解的),看又没有某个状态和它的补集加上第一层选的块能不能覆盖整个区间,能的话这一块内都是可以到达的。加上若干细节就没有了。然后就是 dp 数组要开大一点。神题。
T4
给你一个只有
a b c的字符串,每次可以选择相邻两个不同字符,把他们一起换成第三个字符,可以进行任意多次操作,问最多能得到多少种不同的串。
刚看题解第一句经典套路,但是感觉这个套路我一辈子都想不出来。把三种字符换成 \(0,1,2\),发现每次操作结束后字符串的数字和模 \(3\) 的结果是不变的。 然后打表找规律发现如果原串中有相邻不同字符 \(n>3\) 时所有有相邻相同字符的同余字符串都可以得到。考虑正难则反,\(n>3\) 时答案为所有同于字符串数量减去没有相邻相同字符的字符串数量(注意要算上原本的字符串),\(n\le 3\) 时特判。
T456 都还没看。
浙公网安备 33010602011771号