首页 > 其他分享 >好题——数学与数据结构

好题——数学与数据结构

时间:2024-05-01 09:44:05浏览次数:25  
标签:sum 好题 times 数学 binom 数据结构 方法 种族 mod

前言

本文章将会持续更新,主要是一些个人觉得比较妙的题,主观性比较强(给自己记录用的),有讲错请补充。

带 !号的题是基础例题,带 * 号的是推荐首先完成的题(有一定启发性的)。

组合数

P6620 [省选联考 2020 A 卷] 组合数问题

运用斯特林数好的例题,普通幂转下降幂。用到第二类斯特林数。

\[x^{\underline n}= \sum_{i=0}^{n} \lbrace ^n _i \rbrace x^i \]

下降幂处理方式:先转为阶乘形式,后转为组合数形式。如

\[x^{\underline n}=\binom{x}{n}*n! \]

这题按照题目推式子,主要卡点就是斯特林数的运用。

*高橋君

组合数与数据结构的结合。

离线询问+ (\(n=10^{5}\)) 的数据范围可以联想到莫队。

又通过归纳恒等式可以推出 \(n,k\) 分别左移或右移的式子。

\[\sum_{i=0}^{k+1}\binom{n}{i}=\sum_{i=0}^{k} \binom{n}{i}+\binom{n}{k+1} \]

\[\sum_{i=0}^{k-1}\binom{n}{i}=\sum_{i=0}^{k} \binom{n}{i}-\binom{n}{k-1} \]

\[\sum_{i=0}^{k}\binom{n+1}{i}=2*\sum_{i=0}^{k} \binom{n}{i}-\binom{n}{k} \]

\[\sum_{i=0}^{k}\binom{n}{i}=\frac{1}{2}*(\sum_{i=0}^{k} \binom{n+1}{i}+\binom{n}{k}) \]

注意莫队的正确写法,\(n,k\)的大小关系。

Lonely Mountain Dungeons

首先贪心,每个种族平均分肯定是更优的,所以先设分成 \(k\) 组,设 \(y=\dfrac{c_i}{k}\) 向下取整,\(y_1=\dfrac{c_i}{k}\) 向上取整,\(mod=c_i\% k\),那每个种族可以分出:

\[C_{mod}^2 \times y_1^2+C_{k-mod}^2 \times y^2+mod\times (k-mod) \times y \times y_1 \]

暴力求时间复杂度报表,分为三种方法优化方法了。

方法1:三分法。

上式化简下来一定是关于 \(k\) 的二次函数,显然随着 \(k\) 的增大,值先增大,后减小,是个单峰函数(可以打表试试)。

然后普通三分就可以了。

方法2:差分前缀和法(也是官方题解的方法)

定义 \(f[k]\) 为分为 \(k\) 个小组的最大方案。

可以发现当 \(k>c_i\) 时,当前种族的值是不变的。

\(\sum c_i\) 是 \(2\times 10^5\),所以遍历所有 \(1\) 到 \(n\),让 \(f[j]\) 加上每个种族的贡献。因为当 \(i\) 超过 \(c[j]\) 时,后面的值不变,所以用差分来处理。

for(int i=1;i<=n;i++)
	{
		for(int j=1;j<c[i];j++)
		f[j]+=get(i,j)*b,f[j+1]-=get(i,j)*b;
		f[c[i]]+=get(i,c[i])*b;
	}

最后遍历小组数即可。

方法3:

与上中方法类似,我们知道 $k $ 一定不大于 \(maxc\),按 \(c\) 的大小从小到大排序,从 \(2\) 到 \(n\) 枚举小组数,小于 \(i\) 的种族就暴力计算,大于的因为值都不变了,拿一个数组记录一下前缀即可。

时间复杂度可以证明不超过 \(O(n \sqrt {\sum c})\)

标签:sum,好题,times,数学,binom,数据结构,方法,种族,mod
From: https://www.cnblogs.com/hutongzhou/p/18169030

相关文章

  • 数据结构-二叉树的初始化
    数据结构-二叉树的相关初始化/*************************************************/***@filename: DcirLLinkInsert*@brief对双向循环链表插入的功能实现*@[email protected]*@date2024/04/29*@version1.0:在下坂本,有何贵干*@property:none......
  • python3的数据结构
    一.列表(列表可以修改,字符串和元组不能)list.append(x)-把一个元素添加到列表的结尾-相当于a[len(a):]=[x]list.extend(L)-通过添加指定列表的所有元素来扩充列表-相当于a[len(a):]=Llist.insert(i,x)-在指定位置插入一个元素-a.insert(0,x)会插入到整个列表之前-a.i......
  • .h5ad数据结构解释(anndata 数据格式)
    官方网站:https://anndata.readthedocs.io/en/latest/下面的内容官网都有概述h5ad文件提供了一种可扩展的方式来记录数据及其注释(annotation),主要包含X,obs,var,uns等多个部分,分别存储不同的信息。结构如下图所示X是表达量矩阵,用来联系obs和var。具体来说X是一个稀疏......
  • 数据结构周测错题小结
    小题:1、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元参考答案:D2、假定一个顺序存......
  • 王道数据结构第一章个人向笔记
    目录1.1.0导读1.1.1绪论1.1.2数据结构的三要素逻辑结构数据的运算物理结构(存储结构)1.2.1算法的基本概念1.2.2时间复杂度1.2.3空间复杂度1.1.0导读数据结构在学什么?如何用程序代码把显示世界的问题信息画如何用计算机高效地处理这些信息从而创造价值1.1.1绪论数据......
  • 数据结构与算法学习(1)——BFS(广度优先搜索)
    BFS基础BFS会从根节点开始搜索,在每一个路口面临分叉的时候,先把每个岔路记录下来,然后再去一个一个的往前走一步。节点进行广度优先搜索的顺序题目PS:下列题目均来自leetcode中灵神题单1311.获取你好友已观看的视频......
  • 数学知识(三)
    一、高斯消元高斯消元高斯消元是用来求解多元线性方程组的方法,时间复杂度为O(n3)。初等行列变换把某一行乘以一个非0的数交换某两行将某行的若干倍加到零一行【1】处理后形成阶梯型则有解【2】不是阶梯型左边均为0,右边非0,无解左右均为0,有解算法步骤枚举每一列寻找绝......
  • 数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)
    版本:2024年4月26日V1.0发布于博客园/***@filename:DoubleLinkedList.c*@brief:实现双向循环链表的相关功能*@author:[email protected]*@date:2024/04/26*@version:1.0*@note:*CopyRight(c)2023-2024RISE_AND......
  • 高等数学笔记
    高等数学概念、公式及常用结论高等数学基本公式、常用拓展公式、常用结论、常用解法目录第一章函数极限连续常用的基本极限1-无穷型极限常用结论常用的等价无穷小洛必达法则求极限什么时候可以用洛必达法则洛必达法则的适应类型泰勒公式求极限利用单调有界准则求极......
  • 数据结构——链式栈
    二、链式栈构造链式栈//链式栈的有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造单链式栈的结点typedefstructLinkedStack{DataType_tdata;//结点的数据域structLinkedStack*next;//结点的的指针域}LinStack_t......