「AT_diverta2019_2_e」Balanced Piles 题解

news/2024/11/13 20:20:33/文章来源:https://www.cnblogs.com/cqbzljh/p/18544701

题意描述

有一个长度为 \(N(2\le N \le 10^6)\) 的数组,一开始所有元素均为 \(0\)
\(M\) 为当前数组中的最大元素,\(m\) 是当前数组中的最小元素,你可以执行若干次以下操作:

  • 选择一个大小为 \(m\) 的元素,把他变为 \(x\),其中 \(M\le x \le M+D\)\(m<x\)
    求有多少种操作方法使得数组中的所有元素均为 \(H\),对 \(10^9+7\) 取模。
    \(1\le D\le H\le10^6\)

题解

本题是一道十分 NB 的提前计算题。发现不好记录最小元素的状态,我们转而考虑记录最大元素的。定义 \(dp(x,y)\) 表示当前最大元素为 \(x\),最大元素数量为 \(y\)。尽管我们记录的是最大元素,但它总会在后面变成最小元素,我们只要现在将贡献统计就好了。而最小元素的贡献实际上就是它的排列数(即我们取它的方案数)。转移见下图即可明了:

\(N=4,H=4,D=1\) 时,方案数等价于以下图的 \((0,4)→(4,4)\) 的路径条数:

\(N=4,H=4,D=2\) 时,方案数等价于以下图的 \((0,4)→(4,4)\) 的路径条数:

直接转移即可。时间复杂度 \(\mathcal O(n)\)

代码

#include <bits/stdc++.h>
using namespace std;using ci = const int;using u32 = uint32_t;
using i64 =  int64_t;
using u64 = uint64_t;const int mod = 1e9 + 7;constexpr inline int dil(int x) { return x >> 31 ? x + mod : x; }struct Module {using cm = const Module;int v;constexpr Module() : v() {}constexpr Module(int _v) : v(_v) {}friend constexpr Module operator+(cm &x, cm &y) {return dil(x.v + y.v - mod);}friend constexpr Module operator-(cm &x, cm &y) {return dil(x.v - y.v);}friend constexpr Module operator*(cm &x, cm &y) {return static_cast<u64>(x.v) * static_cast<u64>(y.v) % mod;}constexpr void operator+=(cm &o) { *this = *this + o; }constexpr void operator-=(cm &o) { *this = *this - o; }constexpr void operator*=(cm &o) { *this = *this * o; }
};const int N = 1e6 + 5;int n, d, h;
Module fct[N], f[N];int main() {
#ifdef LOCALfreopen(".in", "r", stdin);freopen(".out", "w", stdout);
#endifcin >> n >> h >> d;fct[0] = 1;for (int i = 1; i <= n; ++i) fct[i] = fct[i - 1] * i;f[0] = 1;Module sum = 0, tot = 1;for (int i = 1; i <= n; ++i) sum += fct[i];for (int i = 1; i <= h; ++i) {tot += (f[i] = tot) * sum;if (i >= d) tot -= f[i - d] * (i == d ? 1 : sum);}cout << (fct[n] * f[h]).v;return 0;
}

参考链接

https://www.cnblogs.com/frank3215/p/diverta2019-2E.html (图片也是这里贺的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833126.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队项目Scrum冲刺-day3

一、每天举行站立式会议 站立式会议照片一张昨天已完成的工作成员 任务陈国金 用户模块的部分接口凌枫 用户登录页面陈卓恒 用户注册界面谭立业 题目搜索页面部分内容廖俊龙 接口测试曾平凡 前端页面测试曾俊涛 题目模块的部分接口薛秋昊 题目提交模块的部分接口今天计划完成的…

Logisim-016-海明解码

仓库地址 https://gitee.com/gitliang/logisim-to-cpu

Logisim-016-海明编码

仓库地址 https://gitee.com/gitliang/logisim-to-cpu

Object

Object 类是 Java 中的顶级父类, 所有的类都直接或间接继承于 Object 类. Object 类中的方法可以被所有子类访问. Object 类没有成员变量, 所以只有无参构造方法. Java 中, 子类的共性才会往父类中去抽取, 然而不可能有一个属性是所有类的共性, 所以在 Object 这个类中, 是没有…

Windows平台下安装与配置MySQL5.7

1.下载mysql安装文件 下载地址:https://downloads.mysql.com/archives/installer/2.安装与配置MySQL 双击打开,接受许可协议,点击下一步:选择自定义安装,点击下一步:选择要安装的产品,点击下一步:点击执行按钮:安装完成,点击下一步进入配置界面:配置界面继续点击下一…

C++ 逆向之常用字符集互转

在过往的编程过程中,常常会因为碰到字符集问题而头痛,而每次在进行字符集转换的时候,各种搜索网上文档,想找字符集转换的示例程序,但是都不尽人意,本篇文章的目的就是彻底解决之前编程过程中对字符集认识以及字符集转换之间似懂非懂、云里雾里的状态,并在文章结尾附上 A…

团队作业4——项目冲刺-1-第二篇

团队作业4——项目冲刺-1-第二篇这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <作业要求>这个作业的目标 修改完善需求规格说明书、系统设计、Alpha任务分配计划、测试计划GitHub 链接 https://github.com/tangliweiwww/ChatGpt🍟一、团队 1.团队名称…

[Paper Reading] Fusing Monocular Images and Sparse IMU Signals for Real-time Human Motion Capture

目录名称TL;DRMethodLocal Pose EstimationRNN-P1RNN-P2RNN-P3Global Translation EstimationRNN-T1RNN-T2RNN-T3Hidden State Feedback MechanismExperiment效果可视化总结与发散相关链接 名称 link 时间:23.09 作者与单位:主页: https://github.com/shaohua-pan/RobustCap…

HarmonyOS Next 入门实战 - 创建项目、主题适配

​开发一个简单的demo,其中涉及一些鸿蒙应用开发的知识点,其中涉及导航框架,常用组件,列表懒加载,动画,深色模式适配,关系型数据库等内容,在实践中学习和熟悉鸿蒙应用开发。 ​​ ​​ 首先下载并安装DevEco Studio开发环境,下载完成后按照提示安装即可,过程不在多说…

rust学习八、包和模块

总体上,也没有什么特别的地方,和其它语言比较起来。 我们可以看懂熟悉的字眼:包括、模块、use、公共等等 如果是英文,则需要知道crate、pub。 本章节对应相关书籍的第七章节. 一、一个rust可执行程序的大体结构 就本章节而言,尚未接触到一个非常复杂的工程结构,据说有什么…

starrycan的pwn学习记录1

一.Introducation 0x01 简介CTF 0x02 什么是pwn ”Pwn”是一个黑客语法的俚语词,是指攻破设备或者系统 。发音类似“砰”,对黑客而言这就是成功实施黑客攻击的声音--砰的一声,被“黑”的电脑或手机就被你操纵了。 CTF中的pwn CTF中的PWN主要是针对于二进制漏洞挖掘与利用,通…

计算机组成原理与操作系统 第二章 处理机组成与管理

目录1.CPU的功能和组成1.1CPU的四大功能1.2CPU的基本组成1.3 一条指令如何在CPU内运行2.指令系统2.1机器语言与指令2.1.1基本概念2.1.2一条指令一般应包含的信息2.1.3指令的类型与功能2.1.4寻址方式2.2指令格式的设计2.2.1基本概念2.2.2指令类型2.2.3操作码类型2.2.4指令设计2.…