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

组合数的低复杂度运算

题源

题目

F. 预期中位数
每次测试的时间限制:3 秒
每次测试的内存限制:256 兆字节
Arul 有一个长度为 n 的二进制数组* a。
他将取该数组中所有长度为 k(k 为奇数)的子序列并找到它们的中位数。
所有这些值的总和是多少?
由于这个和可能非常大,因此输出它对 109° + 7 取模的结果。换句话说,打印该和除以 10° + 7 后的余数。
二进制数组是仅由零和一组成的数组。
† 如果数组 b 可以通过从 a 中删除几个(可能是零个或全部)元素来获得,则数组 b 是数组 a 的子序列。子序列不必是连续的。
奇数长度 k 的数组的中位数是排序后的第 +1 个元素。2
输入第一行包含一个整数 t(1 ≤ t ≤ 104)表示测试用例的数量。
每条测试用例第一行包含两个整数n和k(1≤k≤n≤2105,k为奇数),分别为数组的长度和子序列
每个测试用例的第二行包含 n 个整数 ai (0 < a < 1)——数组的元素。
保证所有测试用例的 n 之和不超过 2.105。
输出
对于每个测试用例,打印模 109 + 7 的总和。

题目分析

基础的组合数问题,不需要多少分析,针对每一种1占据多数的子字符串情况进行组合数目加和就可以主要是算法空间时间复杂度的问题

解答

由于不知道更优时间复杂度的算法+懒,我一直在套用旧的组合数板子
时间空间复杂度都是 O ( n 2 ) 时间空间复杂度都是O(n^2) 时间空间复杂度都是O(n2)

ll Mod;
const ll N = 5e3 + 100;
ll comb[N][N];
auto setMod = [](ll n = 1e9 + 7) {Mod = n;
};
void get_comb(int n) {for (int i = 0; i <= n; i++)for (int j = 0; j <= i; j++)comb[i][j] = (0 < j && j < i) ? (comb[i - 1][j - 1] + comb[i - 1][j]) % Mod : 1;
}
int C(int n, int m) {if (n == m && m == -1) return 1; //* 隔板法特判if (n < m || m < 0) return 0;return comb[n][m];
}
/// 加法递推求组合数,O(n^2),模数非素数时可用

完整代码

新的板子
O ( log ⁡ n )时间复杂度(如果不看初始化 O ( n ) 的话) O ( n )空间时间复杂度的算法 O(\log n)时间复杂度(如果不看初始化O(n)的话)\newline O(n)空间时间复杂度的算法 Ologn)时间复杂度(如果不看初始化O(n)的话)On)空间时间复杂度的算法

ll Mod = 1e9 + 7;
const ll N = 3e5 + 7;auto setMod = [](ll n = 1e9 + 7) {Mod = n;
};//快速幂模板fusk power template
ll qpow(ll a, ll k) {ll ans = 1;while (k) {if (k & 1)ans = 1LL * a * ans % Mod;k >>= 1;a = 1LL * a * a % Mod;}return ans;
}
//组合数模板combination number templatevector<ll> fact(N, 1);
void ini(ll n) {rep(i, 1, n) {fact[i] = (fact[i - 1] * i) % Mod;}
}
ll C(ll n, ll k) {if (n < k)return 0ll;return fact[n] * qpow((fact[n - k] * fact[k]) % Mod, Mod - 2) % Mod;
}
http://www.lryc.cn/news/417610.html

相关文章:

  • 小型并网式光伏气象站:光伏电站的智能守护者
  • JavaScript 中的回调函数(callback)
  • 计算机毕业设计hadoop+spark+hive漫画推荐系统 动漫视频推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据
  • 解决pycharm日志总是弹出“无法运行Git,未安装Git”的问题
  • threejs 节点材质系统 绑定attribute
  • Rabbitmq的几种工作模式
  • 如何在 Debian 上安装运行极狐GitLab Runner?【二】
  • 简单的docker学习 第13章 CI/CD与Jenkins(下)
  • 基于STM32设计的智能鱼缸_带鱼儿数量视觉识别(华为云IOT)(202)
  • 立体连接模式下的传播与沟通:AI智能名片小程序的创新应用与深度剖析
  • 基于Python的Scrapy爬虫的个性化书籍推荐系统【Django框架、超详细系统设计原型】
  • 二叉树bst
  • elasticsearch的使用(二)
  • YOLOv8由pt文件中读取模型信息
  • js遍历效率
  • QModbus例程分析
  • Vue万字学习笔记(入门1)
  • Cesium手动建模模型用Cesiumlab转3D Tiles模型位置不对,调整模型位置至指定经纬度
  • 学习C语言第23天(程序环境和预处理)
  • Ubuntu22.04安装
  • 从入门到自动化:一篇文章掌握Python的80%
  • 开源的主流机器学习框架
  • RabbitMQ:发送者的可靠性之配置发送者重试机制
  • 基于深度学习的大规模MIMO信道状态信息反馈
  • 在Docker中部署Rasa NLU服务
  • SQL语句创建数据库(增删查改)
  • 微信小程序-Vant组件库的使用
  • 为什么企业需要进行能源体系认证?
  • 【日常记录-MySQL】EVENT
  • 嵌入式学习day12(LinuxC高级)