当前位置: 首页 > news >正文

25.11.03

AGC003E

哎我好菜怎么这个题卡半天。

首先想到可以把 \(a_i\) 单调栈干掉,然后倒着扫求出前面要重复多少次。

但是会剩下一段,需要单独做。

先不要想太复杂,考虑如何暴力,因为额外部分只关心长度和次数,因此设计一个关于这俩的递归。

考虑现在长度为 \(x\),需要乘上 \(y\),那么可以从前面找最大的 \(a_t\)\(x\) 就是若干个 \(a_t\) 和剩一段。

那么就可以拆成 \(a_t\) 多做一些次数以及新的额外部分,复杂度会发现显然是对数层递归。

底层的时候差分修改即可。

P14364

考虑一下从前往后填人,新来的过不过只取决于这个人和前面否掉的人数,感受出状态应该是 \(f(i,j)\) 表示考虑填 \(i\) 人,否了 \(j\) 人。

考虑 \(s=1\),那么新加这个人否不否取决于自身,若被否则 \(c_i\le j\),我们把 \(c_i\) 丢进桶可以知道有 \(cnt_j\) 人满足 \(c_i=j\) 以及 \(pre_j\) 人满足 \(c_i\le j\),看起来方案是 \(pre_j\)

但是这里面有些人可能已经在前面填了,因此应该是 \(pre_j-k\)\(k\) 是填入的 \(c_i\le j\) 的人数,于是我们把状态扩到 \(f(i,j,k)\)

这个时候要保持冷静,意识到两点:

  1. 每次 \(j\) 最多加一,移动时,只需考虑 \(c_i=j+1\) 中有多少人被填了。
  2. 这部分人的方案在前面算不进来,我们应该在此时枚举其个数并计算方案。

因此得到转移 \(f(i-1,j,k)\to f(i,j+1,k+l+1)\times(pre_j-k)\times\dbinom{i-k}{l}\times\dbinom{cnt_{j+1}}{l}\times l!\)

道理很好懂,剩下的什么没被否,是零然后 \(\le j\),是零然后 \(>j\) 都是容易的。

场上我给 \(j\) 减了个前面零的个数,而且 \(c_i\) 拍序而不是丢进桶里统计,导致写成了一摊给自己烧宕机了。

http://www.jsqmd.com/news/30442/

相关文章:

  • win10安装neo4j-community-3.5.7-windows
  • 工作感受月记(202511月)
  • 基于Blocking queue的生产消费模型
  • React中useContext的基本使用和原理解析
  • JDK的安装过程
  • 阅读笔记0
  • File文件操作
  • 越南航空数据泄露事件深度解析
  • P11261 [COTS 2018] 直方图 Histogram
  • 2025csp-j游记(废物版)
  • leetcode55. 跳跃游戏 45. 跳跃游戏 II
  • 个体户办理食品经营须知
  • redux-thunk和createAsyncThunk
  • 2025.11.3——1绿1蓝
  • Next.js路由段配置选项笔记
  • 2025.11.3 - A
  • 【每日一面】实现一个深拷贝函数
  • 【AI说Rust 01】Rust 的学习路线
  • 若依后端验证码实现
  • 解码LVGL事件
  • 11.3号学习内容
  • P11771 题解
  • CSP-S 2025 饭堂寄
  • 如何在github上使用github免费域名下预览自己的项目
  • 在ROS中安装PX4依赖实现Gazebo仿真
  • 20232314 2024-2025-1 《网络与系统攻防技术》实验四实验报告
  • 二、驱动基础(基于北京迅为电子)
  • Linux驱动开发学习日记(一)
  • Windows 路由表详解
  • 微软 Foundry Local - 本地 AI 推理解决方案