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

题目记录(Before NOIP2025 ver)

T1. Beautiful Sequence Unraveling

定义 \(dp_{i,j}\) 表示长度为 \(i\),值域在 \([1,j]\) 之间的好序列的个数。发现好序列不好刻画,所以转化为所有序列的数量减去不是好序列的数量。前者很显然,即 \(i^j\)。接下来考虑后者怎么求。

考虑一个不好的序列 \(a\),假设 \(p\) 为最后一个 \(\max(a_1,a_2 \cdots,a_p) = \min(a_{p+1},a_{p+2},\cdots,a_n)\) 的位置,那么我们有一个重要的观察就是 \(a_{p+1},a_{p+2},\cdots,a_n\) 一定是一个好序列不然 \(p\) 就不是最大的。那么我们可以直接枚举位置 \(p\)\(a_p\) 的值 \(m\) 就可以了:

\[dp_{i,j} = j^i - \sum^{i-1}_{p=1}\sum^j_{m=1}(m^p - (m-1)^p)(dp_{i-p,j-m+1} - dp_{i-p,j-m}) \]

使用前缀和优化后可以做到 \(n^3\)

那么接下来考虑设 \(g_i\) 表示长度为 \(n\) 的序列,值域为 \([1,i]\) 的好排列数量,则我们有递推式:

\[g_i=dp_{n,i} - \sum^{i-1}_{j=1}\dbinom{i}{j}g_j \]

那么答案就是 \(\sum^n_{i=1} \dbinom{k}{i}g_i\)

T2. Lockout vs tourist

太牛了!

看到 \(n \le 22\),考虑使用状压 dp。此时设 \(m = |S|\),其中第 \(i\) 题的分数为 \(a_i\)\(S\) 去掉 \(i\) 后的期望最大的分为 \(b_i\),Tourist 有 \(p_i\) 的概率选择第 \(i\) 题,那么期望最大的分就是:

\[\max(p_i \times b_i + (1 - p_i) \times a_i) \]

考虑去二分答案 \(C\),那么我们现在就是需要找到一个 \(p\) 使得所有的 \(a_i + (b_i - a_i)p_i = C\)\(\sum p_i = n\)。那么此时考虑定义 \(d_i = \frac{C - a_i}{b_i - a_i}\),那么如果 \(b_i > a_i\) 则有 \(p_i \le d_i\) 否则 \(p_i \ge d_i\)。由于至少存在一个 \(b_i < a_i\),那么我们可以将判断条件改写为 \(\sum_{b_i < a_i}\max(0,d_i) \le 1\)\(\forall i(b_i \ge a_i),C \ge a_i\)

其实条件 \(2\) 只是给 \(C\) 定了一个下界,我们还是考虑条件 \(1\):我们注意到由于 \(b_i < a_i\),所以当 \(d_i > 0\) 的时候,\(C < a_i\),所以在这里我们只需要考虑所有大于 \(C\)\(a_i\)。这也告诉了我们 \(\sum \max(0,d_i)\) 其实是一个关于 \(C\) 的分段一次函数。那么我们其实可以直接去掉二分,直接在分段后在每一段上求一个最值就可以了,复杂度为 \(\mathrm O(n2^n)\)

T3. 巴蜀中学 NOIP 模拟赛 旋转

你发现有一些点是必须删的,比如 \((x_i,y_i)\)。那么我们定义一个格子 \((x,y)\) 是可选择的当且仅当 \((x,y)\) 是一个合法格子且 \((x,y)\) 不是必须删的。

考虑一次对于 \((x,y)\) 的操作,检查 \((x,y)\) 的左右两边的格子:

  • 两个格子都是可选的,则在两个格子间连一条无向边。
  • 恰一个格子是可选择的,在这个格子上连一个自环。
  • 否则无解。

现在考虑给无向边定向,代表指向的格子被这次操作选择。那么我们的任务就是所有格子的入度均不超过 \(1\) 的方案数,然后对于每一个连通块大力分讨即可。

http://www.rkmt.cn/news/10840.html

相关文章:

  • 78-材料可视化-折线图
  • 完整教程:Redis的java客户端(SpringDataRedis)
  • 国产DevOps工具链崛起:Gitee领衔的本土化技术生态全景解读
  • 从研发效能到知识中枢:Gitee Wiki如何重塑企业知识管理范式
  • Gitee DevSecOps平台:军工软件研发的智能化革命
  • 靠谱的程序员推荐阅读-----《阿里Java开发手册》【强制】所有的覆写方法,必须加@Override注解
  • 杆状病毒表达系统为何成为蛋白表达首选
  • 日记3
  • Ansible + Docker 部署 Zookeeper 集群
  • Gemini CLI 配置问题
  • 本土化与全球化博弈下的项目管理工具选型:Gitee如何为中国企业破局?
  • 完整教程:嵌入式数据结构笔记七——二叉树
  • SQLite的并发问题
  • day 09 课程
  • Jetpack Room 从入门到精通 - 实践
  • LazyLLM端到端实战:用RAG+Agent实现自动出题与学习计划的个性化学习助手智能体
  • FLASH空间划分/存储数据至指定CODEFLASH位置
  • 深入解析:【C语言代码】数组排序
  • 利用 Milvus + RustFS,快速打造一个 RAG!
  • 微前端 micro-app 在vue 中的路由跳转问题
  • 1. 设计模式--工厂办法模式
  • traefik 反向代理 + IdentityServer4
  • Word-通过宏格式化文档中的表格和图片
  • 深入解析:find_code 插件 react_vite
  • SAP BAPI_PR_CREATE 创建采购申请(含自定义字段)
  • NCCL论文阅读
  • 皇牌空战7豪华版DLC补丁
  • BeanUtils中的copyProperties方法使用和分析
  • WoTerm、WindTerm及putty的性能测试对比
  • Python - csv.writer()