GMOJ 2020.10.29【NOIP提高A组】模拟
GMOJ 2020.10.29【NOIP提高A组】模拟
一套前三题较为简单但是并没有做出来的膜你赛
T1.6806achen
首先, , 是可以对调的, 所以默认
可以发现, 如果 左边有大于2个点, 那么走完 左边方案唯一, 且最后停在 , 对于 同理.
所以方案数就为 至 的方案数.
设 为从1到 的方案数, 显然 .
还有一点特殊情况也十分好判.
T2.6808tree
首先假定根为, 答案可以分为两部分讨论 :
1.以为根的子树中包含所有颜色, 那么 对答案的贡献为 子树以外到 的最长链
2.以为根的子树中没有完全包含任何颜色, 那么 对答案的贡献为 到 叶子节点的最长链
每个点的贡献是十分好算的, 问题在于如何判断这个点是否能贡献.
对于 1, 可以按 序遍历所有点, 每个点到根的路径加1, 它与前一个颜色相同的点的 到根的路径减1. 其实就是一次树上差分, 最后有1贡献的充要条件是点的和为 .
对于2, 只分别需要求出每种颜色的点的 , 显然 到根路径上的点完全包含这种颜色, 在 打标记, 最后上传标记即可.
只要倍增 的常数够优秀, 也是能过这道题的.
T3.6808east
先讨论 各不相同的情况,显然一个区间 满足要求的充要条件为 , 。
又可以发现 , 移项得 ,所以对于每个右端点 ,需要维护 的最小值以及取到最小值的左端点数。
考虑用两个单调栈分别维护 和 。对于 ,维护一个单调递减的单调栈,每次弹栈的时候,需要修改一个区间的 ,发现这段区间的 相同,所以其实就是一个区间加操作,维护 同理,所以用一棵线段树维护即可。
再考虑有 相同的情况,可以发现上面式子变为 , 为区间内不是第一次出现的数的个数,记录 上一次出现的位置 ,那么其实就是一个区间加1的操作,同样线段树上搞一搞就好。
T4.6809不难题
Description
给定 k 行 n 列的矩阵,每行为 ~ 的排列,互相独立且随机。
要求将一个区间 的行拉出来合成一行,不能有连续的 个数相同,
求所有区间的方案数之和
Solution
乍一看感觉挺难求的,再一看还是很难求.....
先在每一行末尾加 ,那么区间 满足条件的方案数就转化为 第一次连续出现 次的数为 的方案数 / 。
转化之后便比较好设状态了,设 表示区间 中第一次连续出现 次的数为 的方案数,考虑用 “总方案数” - “不合法方案数”,总方案数就是一堆组合数的乘积。
考虑如何求 ,如果不需要 为第一次连续出现的话, 将每行 之前的数乱排乘 ,但需要删去 不是第一个连续出现的情况,设 表示第一次连续出现 次的数为 y,且要求 能在 连续出现 次后连续出现,也就是 中 的位置都要在 之后,那么对于每个 ,就是 一堆组合数的积,积表示 连续到 连续之间有多少种不同的排列方案。
固定区间左端点,枚举右端点店铺dp,时间复杂度 ,并过不了,但是注意到题目中每一行的排列独立且随机。也就是说,对于满足条件的 ,在只有一行时数量为 ,以后每多一行,依然满足条件的概率为 ,所以数量也相应的,所以对于一次左端点固定,右端点移动的过程中,的总数是的。
综上,在每次新加入一行时维护合法 ,可以使用链表维护,时间复杂度 。
最后答案为
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· Tinyfox 简易教程-1:Hello World!