241119 noip 模拟赛
省流:\(100 + 50 + 45 + 32\)。rk8,喜提前十名中唯一没过t2的。
T1
题意:对于一棵树,记 \(f(i)\) 表示 \(\sum_{1 \leq j \leq n} dis(i,j)\),其中 \(dis(i,j)\) 表示树上 \(i,j\) 之间的距离。
多测,每次给定一个 \(x\),你需要找出最小的一个 \(n\),使得存在一个 \(n\) 个点的树,其上存在两个点 \(u,v\) 使得 \(f(u) - f(v) = x\),输出 \(n\)。
\(T \leq 10^5,x \leq 10^{18}\)。
对于一颗树,我们选择 \(u\) 为某叶子节点,\(v\) 为树的重心,可以近似找到树的最大能匹配到的 \(x\),考虑 \(f(v)\) 换根到 \(f(u)\) 的过程,发现每次换到一个节点 \(s\) 时,\(f(s) - f(v)\) 会增加 \(2sz_v - n\),发现这个值形如 \(1 + 3 + \cdots + (2 \times p - 1)\) 或 \(2 + 4 + \cdots + 2 \times p\),于是我们可以找出最小的 \(p\) 满足这个值大于等于 \(x\),稍微处理一下奇偶性就行。
代码:
T2
可以看这篇题解,讲的很好。
代码:
闲话:noip 模拟 t2 放 *3100 构造素质呢/fn
T3
题意:给定一个长为 \(n\) 的序列 \(a\),\(a\) 中只有 \(0,1,2,-1\),分别表示石头,布,剪刀和不确定,你需要求出所有替换 \(-1\) 为 \(0,1,2\) 的情况中一个最优出拳策略的得分的和。如果你这局赢了,获得 \(1\) 分,平局不获得,输了获得 \(-10^9\) 分。你必须保证相邻两局出的拳不同。
\(n \leq 2000\)。
首先可以暴搜每个 \(-1\) 取的值,然后设 \(dp_{i,j}\) 表示第 \(i\) 局出了 \(j\) 的最大得分,转移显然,这样我们就得到了一个 \(\Theta(3^nn)\) 的做法。注意到我们求最优的局数的 dp 中对于每个 \(i\),只有 \(dp_{i,0},dp_{i,1},dp_{i,2}\) 是有用的,所以我们可以把这三个值扔进 dp 里做,设 \(f_{i,x,y,z,o}\) 表示第 \(i\) 局出了 \(o\),三个值分别为 \(x,y,z\) 的方案数,这样时间复杂度是 \(\Theta(n^4)\)。发现这三个值中只有两个是有用的,因为我一定可以找到一种方案使得没有一局输掉,这跟 \(o\) 有关,时间复杂度降为 \(\Theta(n^3)\)。观察 dp 柿子,发现我们只保留 \(x - y\) 的值也能够正常转移计算答案,这样时间复杂度为 \(\Theta(n^2)\)。具体实现中可以在转移中算出最小值的贡献,最后算出差值的贡献。
T4
还不会。
__EOF__

本文链接:https://www.cnblogs.com/System-Error/p/18555600.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!