二分和排序
不会JAVA的运营不是好数分
这个作者很懒,什么都没留下…
展开
-
二分和排序
快速排序算法思想基于分治总体步骤的话确定分界点调整分区递归步骤1、x = q[l + r >> 1],i = l - 1,j = r + 1; (i = l-1,j = r+1。是因为下面,do i++,先加了再说。所以这里。先把其移动到l,r的两侧)2、分治(小于x的放到左边,大于x的放到右边)。3、分别递归左右两边。模板void quick_sort(int q[], int l, int r){ if (l >= r) return; //原创 2020-05-25 19:03:52 · 1114 阅读 · 0 评论 -
2015 d2t1 跳石头
2015 d2t1 跳石头题目https://www.luogu.com.cn/problem/P2678题意就是最多移走m块石头,使得选手跳跃的最短距离最大即可。最小的那个跳跃距离。在这么多移动石头的方案中最大。再不懂,可以看看输入输出和样例解释。想法利用二分的方法来找到最小的最大跳跃距离二分一开是范围是(1,len)mid = (1 + len)/2 。那么如何确定mid是否符合条件呢?这一步可以用贪心的方法来做首先,当前石头和前一块石头距离为 dis。 如果dis <原创 2020-07-05 21:21:21 · 108 阅读 · 0 评论 -
04 P3957 跳房子
04 P3957 跳房子https://www.luogu.com.cn/problem/P3957题意n个格子,d为机器人每次前进的距离,k为需要达到的目标每一次,机器人可从左到右前进d.也可以画金币 g。让机器人变得灵活其中 如果 g <d 。活动范围为: d-g <= x <= d+g如果 g>d。活动范围为 1<= x <= d+g想法dp+二分f(i) 代表走到第i个格子了,最大的分数二分来找到合适的金币数//P3957原创 2020-06-26 20:52:26 · 190 阅读 · 0 评论 -
最长上升子序列 (LIS)
最长上升子序列 (LIS)最长上升子序列解题报告给定一个长度为N的数列(w[N]),求数值严格单调递增的子序列的长度最长是多少。样例输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1 ≤ N ≤ 1000,−1e9 ≤ 数列中的数 ≤ 1e9输入样例:73 1 2 1 8 5 6输出样例:4想法一(动态规划) O(n^2)* 状态表示:f[i]表示从第一个数字开始算,以w[i]结尾的最大的上升序列。(以w[i]原创 2020-06-13 23:04:29 · 198 阅读 · 0 评论 -
789. 数的范围 - 二分模板
789. 数的范围给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n原创 2020-06-13 22:12:24 · 116 阅读 · 0 评论 -
P1147 连续自然数和-前缀和
P1147 连续自然数和https://www.luogu.com.cn/problem/P1147题意输入一个n。找到1-n中连续区间上和为n的数。输出左右端点想法前缀和+ 二分已知 生成前缀和s[i],且 s[i] - s[k-1] = n,求k那么只需要找到 s[i] - n 在s数组中的位置就可以求得 k 了且已知,s前缀和数组,必然单调。(自然数的和)//P1147 连续自然数和// Created by majoe on 2020/5/27.//https://w原创 2020-06-02 09:11:29 · 364 阅读 · 0 评论 -
P1678 烦恼的高考志愿-二分
P1678 烦恼的高考志愿-二分https://www.luogu.com.cn/problem/P1678题意m个学校,n个学生。每个学生都有成绩,每个学校都有分数线给每个学生匹配上一个学校,使得分数线和学生成绩的绝对值最小。输出差值之和。想法二分+排序先将分数线数组排序用于二分找到最后一个<= p[i]的序号的学校,分别比较 l序号和l+1的序号学校的分数线。绝对值之差小的,便是答案。//// Created by majoe on 2020/5/27.// ht原创 2020-06-02 08:51:38 · 890 阅读 · 0 评论 -
P1163 银行贷款
P1163 银行贷款https://www.luogu.com.cn/problem/solution/P1163题意给出n,m,k,其中n为贷款总额,m每月还款,k为总的月份。求贷款者向银行支付的利率p,使得:∑i=1km(1+p)i=n\sum_{i=1}^{k} \frac{m}{(1+p)^{i}}=ni=1∑k(1+p)im=n按百分比形输出,精确到小数点后一位。想法浮点数二分+数学上面方程式可看为,以p为自变量的单调函数。(因为在分母)那么利用二分,可以把p给找出来原创 2020-06-02 08:43:20 · 717 阅读 · 1 评论 -
P1138 第k小整数
P1138 第k小整数https://www.luogu.com.cn/problem/P1138#submit题意从小到大,第K小个数想法快速选择算法+去重快排的每一趟,数轴的左边都会是 <= x 的, 右边都是 >= x 的。左边元素的个数是 s1 = j - l + 1, 如果k <= s1 的话,那么下次递归的区间就是左边的第k个k > s1的话,那么这个数一定在右边的第 k -s1个数。直到 l == r 时返回q[l]。(会保证第k小的数一直在递归原创 2020-05-25 19:11:37 · 270 阅读 · 0 评论 -
acwing 786. 第k个数-原理。快速选择
acwing 786. 第k个数题意从小到大,第K个数。注意是第k个数想法快速选择算法快排的每一趟,数轴的左边都会是 <= x 的, 右边都是 >= x 的。左边元素的个数是 s1 = j - l + 1, 如果k <= s1 的话,那么下次递归的区间就是左边的第k个k > s1的话,那么这个数一定在右边的第 k -s1个数。直到 l == r 时返回q[l]。(会保证第k小的数一直在递归的区间中,那么当区间里只有一个数的时候,就一定是要找的数了。)图/原创 2020-05-25 19:14:00 · 262 阅读 · 0 评论 -
P2249 【深基13.例1】二分应用
P2249 【深基13.例1】查找https://www.luogu.com.cn/problem/P2249题意数组中,找到一个数的起止序号。这个数据可以重复。没有输出 -1 -1想法二分+寻找左右边界寻找左边界的话,如下图需要a[mid] >= target (因为mid不一定一次就能找到左边界,需要不断缩小区间)如果为true,我们知道 左边界一定在 【left,mid】之间 right = mid如果为假,那么左边界一定在【mid+1,right】之间 lef原创 2020-05-25 19:17:52 · 226 阅读 · 0 评论 -
P1908 逆序对 — 归并应用
P1908 逆序对 — 归并应用https://www.luogu.com.cn/problem/P1908题意求一个数组的,逆序对。想法归并排序.把数组一分为二,比较两个数,有以下三种情况两个元素都在左边;两个元素都在右边;两个元素一个在左一个在右;那么先左后右。再两边递归算左边的;递归算右边的;算一个左一个右的;此时左右数组已经有序把他们加到到一起。同时这个时候我们注意到一个很重要的性质,左右半边的元素在各自任意调换顺序,是不影响第三步计数的,因此我们可以数完原创 2020-05-25 19:15:52 · 259 阅读 · 0 评论