2022百度之星初赛-第一场
T1 洞穴
本质上是给出树上两点之间的距离,还原树的结构。
可以直接\(floyd\)来判定。
进一步的可以对边进行排序每次取最小的加入集合即最小生成树的过程保证正确性。
T2 小度养小猫
本质上是求出一个贪心的顺序使得代价最小。
每个代价为\((t_i^2-i^2)c_i\)
展开\(t_i^2c_i-i^2c_i\)后面的一项为常数可以忽略。
就先考虑第一次喂猫会喂谁,那么剩下的猫的增量为\((2t_i+1)c_i\)
注意到左侧每个猫都相同所以优先喂\(c_i\)较大的。
利用堆即可完成贪心过程。
T3 简单题
给出一个序列要求是否能将序列分成不严格递增和不严格递降两个序列。
考虑每个数字只能分为其中一个序列。考虑dp来做设计一个状态覆盖状态集合。
那么容易想到\(f_i,0/1\)分别表示第\(i\)个数为递增序列时递减序列的最大值。为递减序列时递增序列的最小值。
正确性显然。转移即可。
T4 积木
背包类型问题。虽然很大但还是需要利用背包才能解决。
考虑一个数字用多少会变得没有用。
设\(L=LCM(1,2,3,4,5,6,7,8,9,10)=2520\)
对于数字\(i\)当用了\(\frac{L}{i}\)的时候这个就变得没有意义因为其他数字也可以达到。
假设最优解第\(i\)个数字用了\(c_i\)那么考虑一种方法将\(c_i\)的规模缩小。
设总数为\(s_i,s_i\%\frac{L}{i}=r\)
可以发现只需要用\(r+\frac{L}{i}\)个做背包其他的东西直接合成\(L\)就可以满足\(c_i\)的所有情况。
那么每个数字的个数就确定了做背包即可复杂度为\(nm\)
但是这样可能会超时。
考虑直接预留一小部分做背包其余的直接贪心。
最后枚举所形成的的背包利用贪心来进行对接。
实际上数据很弱,随便写都能过。
T6 光线谜题
考虑每次反射形成平行四边形,可以发现是辗转相减的过程形成平行四边形。
可知答案为辗转相减次数\(2(s-1)\)。
T7 防AK题
建立dfs序后对知识点开线段树这样每次询问就是在询问线段树上的一段区间的点数。
动态开点即可。
T8 大水题
从蚂蚁洞开始bfs即可。注意不能通过的条件即可。