「CF1437F」Emotional Fishermen 题解

news/2025/1/22 15:30:19/文章来源:https://www.cnblogs.com/cqbzljh/p/18686174

小水题一道

Description

有 n\((n\le 5000)\) 个渔民,每个渔民钓了一条重 \(a_i\) 的鱼,渔民按任意顺序展示他们的鱼。
若当前渔民的鱼的重量为\(x\),之前展示过的鱼的最大重量 \(y\)
一个排列满足条件当且仅当对于每个 \(x\),满足 \(2y\le x\)\(2x\le y\)
问有多少个排列满足条件,对 \(998244353\) 取模。

Solution

我们如果将每一个曾作为最大重量的鱼看作关键点,那么对于某一种关键点取法,向里面填数是容易计数的。只需要考虑怎样定义状态方便转移即可。
首先,我们将鱼的重量排序,然后定义 \(dp_{i}\) 表示第 \(i\) 条鱼关键点的方案数。显然有初值 \(dp_{n}=1\)。又定义 \(p_{i}\) 表示最大的满足 \(2a_{i-p_{i}}>a_{i}\) 的数,则有以下转移:

\[dp_{i}=\sum_{a_{j}\geq 2a_{i}}{dp_{j}\times \prod_{k=1}^{p_{j}}(n-j-1+k)\times \prod_{k=p_{j}+1}^{j-i+1}(n-j+k)} \]

最后同理处理答案即可。

Code

#include <bits/stdc++.h>
using namespace std;using ci = const int;using u32 = uint32_t;
using i64 =  int64_t;
using u64 = uint64_t;template<class T> inline void Max(T &x, const T &y) { if (x < y) x = y; }
template<class T> inline void Min(T &x, const T &y) { if (y < x) x = y; }const int N = 5005;
const int mod = 998244353;constexpr int dil(int x) { return x >> 31 ? x + mod : x; }struct Module {using cm = const Module;int v;Module() {}Module(int _v) : v(_v) {}#define _(s) friend Module operator s(cm &x, cm &y)_(+) { return dil(x.v + y.v - mod); }_(-) { return dil(x.v - y.v); }_(*) { return u64(x.v) * y.v % mod; }
#undef _#define _(s) void operator s##=(cm &o) { *this = *this s o; }_(+) _(-) _(*)
#undef _
};Module qpow(Module x, int y) {Module z(1);do if (y & 1) z *= x;while (x *= x, y >>= 1);return z;
}int n, a[N];
Module dp[N], fct[N], ifct[N];void init(ci n) {fct[0] = 1;for (int i = 1; i <= n; ++i)fct[i] = fct[i - 1] * i;ifct[n] = qpow(fct[n], mod - 2);for (int i = n; i; --i)ifct[i - 1] = ifct[i] * i;
}inline Module mul(int l, int r) {if (!l) return (r == -1);return fct[r] * ifct[l - 1];
}int P[N];int main() {
#ifndef ONLINE_JUDGEfreopen(".in", "r", stdin);freopen(".out", "w", stdout);
#endifios_base::sync_with_stdio(0);cin.tie(0); cout.tie(0);cin >> n;init(n);for (int i = 1; i <= n; ++i) cin >> a[i];sort(a + 1, a + 1 + n);for (int i = 1; i <= n; ++i) {int &p = P[i];while (2 * a[i - p] > a[i]) ++p; --p;}dp[n] = 1;for (int i = n - 1; i; --i) {for (int j = i + 1; j <= n; ++j) {if (a[j] >= 2 * a[i]) {int p = P[j];dp[i] += dp[j] * mul(n - j, n - j + p - 1) * mul(n - j + p + 1, n - i - 1);}}}Module ans(0);for (int i = 1; i <= n; ++i) {int p = P[i];ans += dp[i] * mul(n - i, n - i - 1 + p) * mul(n - i + p + 1, n - 1);}cout << ans.v;return 0;
}

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

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

相关文章

《操作系统真象还原》第九章 线程(二) 多线程轮转调度

本文是对《操作系统真象还原》第九章(二)学习的笔记,欢迎大家一起交流第九章 线程(二) 多线程轮转调度 本文是对《操作系统真象还原》第九章(二)学习的笔记,欢迎大家一起交流,目前所有代码已托管至 fdx-xdf/MyTinyOS 。 上一节中成功创建了线程并运行,这一节要实现的…

Cisco APIC 6.0(8e)M - 应用策略基础设施控制器

Cisco APIC 6.0(8e)M - 应用策略基础设施控制器Cisco APIC 6.0(8e)M - 应用策略基础设施控制器 Application Policy Infrastructure Controller (APIC) 请访问原文链接:https://sysin.org/blog/cisco-apic-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org思科…

clickhouse本地表和分布式表说明(3分片单副本)

环境: clickhouse:24.8.11.51.创建本地表和分布式表 在一个节点上执行即可,我这里配置的分片使用了 defaultclickhouse-client --host 192.168.1.102 --port=9000 use db_test CREATE TABLE tb_test_local ON CLUSTER default (id Int32,name String,timestamp DateTime DEFAUL…

分发测试

协程的IO asyncio 作为实现异步编程的库,任务执行中遇到系统IO的时能够自动切换到其他任务。协程的IO asyncio 作为实现异步编程的库,任务执行中遇到系统IO的时能够自动切换到其他任务。协程使用的IO模型是IO多路复用。在 asyncio 低阶API 一篇中提到过 “以Linux系统为例,I…

【图】数场功能架构图

【图】数场功能架构图(来源:国家数据基础设施建设指引) (1)点:参与方之间的自身数据安全能力约定; (2)线:涉及到网络高可用,可以根据DSMM评估域进行统一约定; (3)面:DSMM中数据生存周期安全,场景化能力约定;

hyperledger

https://topgoer.cn/docs/blockchain_guide/blockchain_guide-1emut2dv80st1Hyperledger 所有项目代码托管在 Github上。目前,主要包括如下顶级项目(按时间顺序)。Fabric:包括 Fabric、Fabric CA、Fabric SDK(包括 Node.Js、Java、Python 和 Go 语言)等,目标是区块链的基…

【图】数联网功能架构图

【图】数联网功能架构图(来源:国家数据基础设施建设指引)

米尔瑞芯微第二代8nm高性能AIOT平台-RK3576开发板怎么样?

文章来源公众号:电子开发学习 瑞芯微近期推出了第二代8nm高性能AIOT平台——RK3576。 RK3576应用方向指向工业控制及网关,云终端,人脸识别设备,车载中控,商显等等。参数方面,内置了四核Cortex-A72+四核Cortex-A53,频率最高2.2GHz,内置ARM G52 MC3 GPU,NPU算力高达6TO…

openssl头文件出现DEPRECATEDIN_1_1_0导致引入头文件时程序无法编译

openssl头文件出现DEPRECATEDIN_1_1_0导致引入头文件时程序无法编译我使用的是unbuntu20.04版本中,通过apt安装的openssl,发现openssl中的多个库文件中会出现类似DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)),导致引入头文件时无法编译成功. 例如bio.…

人工智能创新型教师培育计划(第一期)

Skip to contentOpenHydraSearchKMain Navigation首页 课程新一代人工智能经典实验【中学】 XEdu系列【中学】 中小学AI开源课程倡议使用指南活动获取支持On this page人工智能创新型教师培育计划(第一期) 一、组织单位 二、活动背景 三、活动内容 四、活动安排 五、师资介绍…

前置数学

一些必要 trick推式子,先提 \(\sum\) 和 \(\Pi\) 到最前面,然后从后往前合并,必要时考虑更改 \(\sum\) 的取值 看到次方变为斯特林数,\(x^n=\sum\limits_{i=0}^{n} {n \brace i}{x \choose i}i!=\sum\limits_{i=0}^{n}\sum\limits_{i=1}^m{(-1)^{m-i}\frac{i^n}{(m-i)!}}{x…

MUX-VLAN

MUX VLAN(Multiplex VLAN)是一种高级的VLAN技术,它通过在交换机上实现二层流量隔离和灵活的网络资源控制,提供了一种更为细致的网络管理方式。 一、基本概念 MUX VLAN分为主VLAN(Principal VLAN)和多个子VLAN(Subordinate VLAN)。 主VLAN是MUX VLAN配置中的核心VLAN,它…