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

20251117~20251123NOIP模拟赛

20251117NOIP模拟赛

A:

题目大意:

\(n\) 个点,每个点有 \(a_{i}\) 个孔,你现在要在这 \(n\) 个点中连 \(n - 1\) 条边,使得他们联通。
每条边连接两个孔,每个孔最多连接 \(1\) 条边,两种连接方案相同,当且仅当每条边连接的两个空不同。
问不同的方案数,模数给定。
\(n \le 10^6, a_{i} \le 10^9\)

解题思路:

看到生成树计数,往 prufer 序列上想。
但这个题对于第 \(i\) 个点来说,如果它的度数为 \(d_{i}\),那么内部的方案有 \(\frac{a_{i}!}{(a_{i} - d_{i})!}\)
那么对于一个度数为 \(d_{i}\) 的节点 \(i\),它在 prufer 序列中出现了 \(d_{i} - 1\) 次,对于 prufer 的方案数相当于 \(\binom{n - 2}{d_{1} - 1,d_{2}-1 \dots d_{n} - 1}\)
那么我们现在就有了式子:

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} \frac{a_{i}!}{(a_{i} - d_{i})!} \binom{n - 2}{d_{1} - 1,d_{2}-1 \dots d_{n} - 1} \]

先将后面的组合数拆开:

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} \frac{a_{i}!}{(a_{i} - d_{i})! \times (d_{i} - 1)!} \times (n - 2)! \]

然后我们发现中间的数和标准的组合数有 \(O(1)\) 的偏差,所以考虑变一下,变成一个组合数。

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} a_{i} \frac{(a_{i} - 1)!}{(a_{i} - d_{i})! \times (d_{i} - 1)!} \times (n - 2)! \]

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} a_{i} \binom{a_{i} - 1}{d_{i} - 1} \times (n - 2)! \]

因为我们知道了 \(d_{i} - 1\) 之和 为 \(n - 2\),然后我们后面的式子还是连乘的形式,所以考虑范德蒙德卷积的扩展形式。

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} a_{i} \binom{\sum_{i = 1}^{n} a_{i} - n}{n - 2} \times (n - 2)! \]

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} a_{i} \frac{(\sum_{i = 1}^{n} a_{i} - n)!}{(n - 2)! \times (\sum_{i = 1}^{n} a_{i} - n - n + 2)!} \times (n - 2)! \]

\[\sum_{\sum_{d_{i} - 1} = n - 2,d_{i} > 0} \prod_{i = 1}^{n} a_{i} \frac{(\sum_{i = 1}^{n} a_{i} - n)!}{(\sum_{i = 1}^{n} a_{i} - n - n + 2)!} \]

那么这个式子就能 \(O(n)\) 算了。

没想到的点:

  1. 不熟悉 prufer 序列,不知道 prufer 的原理,对生成树计数不敏感。
  2. 不熟悉范德蒙德卷积,稍微扩展一下就不会了,看到和固定,求组合数乘积也要敏感。

T3:

题目大意:

有两天,第一天有 \(n\) 个人,第 \(i\) 个人在 \(s_{i}\) 时刻进入同一个房间,在 \(t_{i}\) 时刻离开,如果两个人在同时在房间里,那么他们会互相加对方的好友。
第二天每个人会把自己的明信片挂到网站上,每个人可以看到/转发 好友自己发的/转发的明信片,问每两个人都看到对方的明信片最小的转发次数。
\(n \le 2 \times 10^5\)

解题思路:

这种题,它并不特别关心标号,所以我们可以先排序,所以我们先按 \(l\) 从小到大排序。
由于注意到人与人之间的明信片互不影响,所以将每个人单独考虑,即让其他人都看到这个人明信片的最小转发次数。

而对于第 \(i\) 个人来说,\(1 \sim i - 1\) 不会被 \(i + 1 \sim n\) 影响,所以我们可以直接设 \(f_{i}\) 表示前 \(i\) 个,由 \(i\) 转发,最少需要多少个转发。
转移就是枚举上一个转发得位置,BIT 优化。
那么设 \(g_{i}\) 表示 \(i\) 转发,让 \(i \sim n\) 都收到最少多少转发。
同理,也是 BIT。

但我们发现,\(1 \sim i - 1\) 中可能会出现一个超级长的,这样他就影响到 \(i + 1 \sim n\) 这部分了。
然而,能影响到后面的线段显然只有一个,那就是前面转发的人中 \(r\) 最大的。
那么考虑它要满足什么条件,以及对答案的贡献是什么。

条件显然易见,要求完全覆盖 i,贡献就是 \(f_{j}+g_{j}-1\),二维数点即可。
但是注意一个地方,我们之前在排序的时候,只要求了 \(l\),但这里我们为了好写,当 \(l\) 相同的时候,要按 \(r\) 从大到小。
\(O(n \log n)\)

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

相关文章:

  • 谁又不是一边破碎一边前行
  • Java的第一个程序
  • 题解:qoj14419 Maximum Segment Sum
  • 20232310 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 完整教程:基于Python楼王争霸劳动竞赛数据处理分析
  • 46
  • 2025.11.21博客
  • html导出pdf
  • 【第7章 I/O编程与异常】为什么句柄看起来像指针却不是指针?
  • SQL 基础语法
  • 实用指南:暖手宝方案开发,暖手宝MCU控制方案开发设计
  • NVM 与 单节点下PM2进程守护 安装配置以及使用教程完整指南(含 Node.js 环境搭建)
  • 北大六院的诊断
  • Pycharm远程连接服务器项目 - 实践
  • django项目前端模版文件,在pycahrm无法使用ctrl+alt+l格式化代码的解决办法
  • 北大六院后看又相
  • TPAMI 2025 | 从分离到融合:新一代3D场景技术建立双重能力提升!
  • 详细介绍:后端开发常用Linux命令
  • QT:Qt5.14向文档输出表格--编译异常信息
  • 《程序员修炼之道》阅读笔记5
  • java面向对象知识补充
  • 卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验
  • 全网都在找的Nano Banana Pro API 来了!便宜稳定0.15/张
  • 通过DataReader获取sql查询的字段元数据信息
  • 2025.11.21 - A
  • 2025年新版ADB工具箱下载+驱动+ADB指令集+fastboot刷机ROOT程序
  • P7960 [NOIP2021] 报数__洛谷题解
  • 与括号序列相关的 DP 笔记
  • 【251121】CF2171 Div.3 vp 总结
  • OI 笑传 #32