排序
文章平均质量分 89
AcerMo
一只辣鸡大学生
展开
-
【学习笔记】排序算法
0 前言 排序使我们在算法竞赛以及数据结构中常用的一类基础算法,大体上分为插入排序、选择排序、交换排序、分配排序、归并排序几大种,每种下面又存在着细化的不同排序方式。不同方式可以应用于不同的数据规模以及不同的场景。 稳定:重复数字排序后相对于排序前的顺序不变,则算法是稳定的。1 插入排序1.1 基本思想我们从直观含以上理解,插入即将数据插入到某个位置,应用到排序中,我们将直接把数据插入到适当位置的排序方式称为插入排序。1.2直接插入排序1.2.1 基本原理这是最符合我们人直观排序方式的原创 2021-11-13 13:21:12 · 396 阅读 · 0 评论 -
洛谷 P1177 快排【模板】
快排是对冒泡排序的改进,复杂度为O(nlogn),但相较冒泡排序,内部不如冒泡排序稳定;基本思想:递归。每次递归都将待排数组拆分成两份,左份中的元素均比右份小,直到递归到每份中只有一个元素,则此时所有元素均有序;关键:找到一个在中点左边且比中点值大的点,再找到一个在中点右边且比中点值小的点,然后交换这两个点的位置,使其满足左区间均小于中点,右区间均大于中点。代码如下://By Acer_mo#i...原创 2018-02-25 20:15:22 · 410 阅读 · 0 评论 -
BZOJ1045&&洛谷P2512 [HAOI2008]糖果传递
环形均分纸牌一个人最后的状态是sum/n=xi-givei+geti然后将geti-givei看成一个常量bi,那么ans=Σbi,那么我们就是要让它最小然后根据均分纸牌的思路,自然要对他求一个前缀和,然后在前缀里找一个常量使所有数减这个值再求和的ans最小,那就是中位数呗代码//By AcerMo#include<cmath>#include<cstd...原创 2018-07-28 10:26:48 · 252 阅读 · 0 评论 -
纪中OJ 5775【NOIP2008模拟】农夫约的假期
思维题不难发现,这题是求一个最小曼哈顿距离和,之后呢,我们通过"平面上有一堆点,选一个点,使距离和最小,这个点一定是坐标的平均值,类比可得,在曼哈顿距离下,这个点因该是这一堆点的横纵坐标的中间值,然后就大力尝试,结果就A了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>...原创 2018-08-09 20:01:02 · 533 阅读 · 0 评论 -
BZOJ5278&&洛谷P4375 [USACO18OPEN]Out of Sorts (金组)
智障(shang)题+树状数组维护前缀和我们定义一下冒泡排序的分割点,分割点i的定义就是在他左边的点的rank都小于等于i,右边的rank都大于等于i,也就是说一个分割点出现后,他左边的点不会再跑到右边定义si表示在排名在i之前的数不在i之前的个数不难发现,题目给的程序跑一次,会使一个分割点左侧的点跑到右边,一个右侧的点跑到左边,然后就会使这个点的si-1,所以我们发现,排序的次数就是...原创 2018-09-17 15:12:19 · 356 阅读 · 0 评论 -
BZOJ5277&&洛谷P4372 [USACO18OPEN]Out of Sorts(白金组)
第一直观思路是一个点的贡献是它递归的深度,但是咋求这个深度呢我们不妨沿用金组分割点的思路,对于一个rank在分割点左侧但位置在分割点右侧的点,一次排序会被一个比他大的数换一次,也就是说每次排序,它的位置就会前移一位,所以我们考虑的这个分割点出现的时刻就是i之前的元素最远的位置-i,然后不难发现,一个元素停止递归的时刻当且仅当它左右的分割点都出现的时候,也就是max(time[i],time[i...原创 2018-09-17 16:15:41 · 306 阅读 · 0 评论 -
洛谷P3029 [USACO11NOV]牛的阵容Cow Lineup
STL大法好&&双指针大法好双指针是一个玄学的东西总的来说就是用一个变量l指在一个左端点,然后用一个变量r向右扩展直到符合要求的区间的条件为止,这玩意貌似也叫尺取法??这道题数据范围hin大怎么办?用map离散化一下就好了具体实现我们读入的时候,用map记录每个出现的种类,记录总数cnt然后我们需要按下标排个序,然后再开始圈答案然后下面用双指针,从l=1,r=1开始 ...原创 2018-10-02 19:55:06 · 331 阅读 · 0 评论 -
POJ 3122 4 Values whose Sum is 0
双指针?题意有四个数集,问你从每个集合里拿一个数出来,总和是0的方案数思路我们n2n^2n2的计算出a+b的值s1,c+d的值s2,然后把s1从小到大排序,s2从大到小排序,然后按顺序枚举s1中的值,发现他在s2中的对应值具有单调性,也就是说,在s1中存在a1,a2,在s2中存在b1,b2,b3,满足a1<a2,b1>b2>b3,若a1+b1>0,那么a2+b1肯定...原创 2018-10-16 20:33:51 · 172 阅读 · 0 评论