欢迎光临散文网 会员登陆 & 注册

都是数学题!都是数学题!

2020-12-20 00:02 作者:非知名科技区UP  | 我要投稿

哈喽各位亲爱的观众朋友大家好!今天我们来了解一下分治算法。

三连后看 养成习惯


分治,解释为“分而治之”,意为将一个大的问题分成更多的小问题来解决。凭着简简单单的一句话让大家去马上做题肯定是不太现实的,那么就让我们通过今天的几道基础题,来学着用一下分治。让我们点开下面的音乐,开启今天的内容吧!

首先感谢各位的支持。上一期我的文章阅读量超过了30 。我也兑现我的承诺,把程序放到洛谷的数据里评测了一下下

洛谷的数据比我们学校OJ的都简单???

今天的题是“快速幂”:

输入b,p,k的值,求b^p mod k的值。其中b,p,k为整型数。

这~~~我一看就懵了 。b^p我还能勉强理解,请问你给写个mod是什么意思?我网上一查,原来是昨天(误)原来mod的含义是C++常说的百分号。

这道题目本身不难,要满足这么大的数据规模就很难了。但是,求余的话我们不是可以试着把已经被整除掉的数据抹去,再依据a^n=a^((n/2)*2)(a%2==0)或者a^n=a*(a^((n/2)*2))(a%2!=0)的数学性质,将a^n一步步的分解开来,然后逐级乘方不久完了嘛!整体而言这样的计算复杂度应该是 θ(log(p)),这样我的电脑就能接受了。

以后我们很难见到这样短小精悍的代码了

感觉题解和思路的数学味儿是不是重了很多?这大概就是未来算法的特点了。我也想说,咱这哪是信竞啊,分明是数学竞赛计算机考试好不好!解决了这道题,我想顺带说一下,记得我们的函数必要时一定要有return!该结束的递归或者DFS一定不能让它再运行下去。别问我咋知道的(捂脸),不然程序分分钟死递归超时!


这还是一个比较入门的数学问题。我觉得我可以留一个堆排序的作业,提醒一下,BNDSOJ上的堆排序题测试数据开头都是150000,不要想着用老实算法骗分哦!

题目:

给定n(1≤n≤150000)个数,每个数在-10^9到10^9之间(包含边界),用堆排序将他们升序排序。

输入、输出描述:

第一行输入一个n,表示有n个数,接下来一行n个整数。

输出一行,将这n个整数从小到大输出,每个整数之间用一个空格隔开。

示例输入:

8
-4128 8544 13928 15221 -6654 9127 5532 9123

示例输出:

-6654 -4128 5532 8544 9123 9127 13928 15221

好啦,今天的文章到这里就结束啦。喜欢的话记得一键三连~~下一期在更新题解的基础上还会讲一道新的题。同时我们文章开头的音乐栏目也欢迎大家来点歌推荐好听的纯音乐。我们下一期再见啦!

都是数学题!都是数学题!的评论 (共 条)

分享到微博请遵守国家法律