自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 算法导论的C++实现——7.区间第k大问题(第九章中位数和顺序统计量)

最大值和最小值遍历一遍直接找到最大值或者最小值是比较简单的算法:int find_maxnumber(int* a){ int maxa = 0; for (int i = 1; i <= n; i++) { if (a[i] > maxa) { maxa = a[i]; } } return maxa;}我们要解决的问题是如何同时找到一组数据中的最大值和最小值。如果直接遍历两边会进行2n次比较,但事实上可以用3/2n次比较就可以求出最大值和最小值。不同

2020-11-23 20:27:13 235

原创 算法导论的C++实现——6.计数排序(第八章线性排序)

比较排序的局限性比较排序的性质:在最终结果中,各元素的次序依赖于他们之间的比较。我们把这类排序算法称为比较排序。通过决策树模型可以得到结论:在最坏的情况下,任何比较排序算法都需要做O(nlgn)次比较。而且归并排序和堆排序是渐进最优的比较排序算法。线性排序接下来我们讨论三个线性复杂度的排序算法:计数排序、基数排序和桶排序。**这些算法是用运算而不是比较排序来确定顺序的。**因此下界O(nlgn)对他们是不适用的。计数排序的基本思想计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数

2020-11-21 21:09:29 154

原创 算法导论的C++实现——5.1快速排序的随机化版本

快速排序的局限性因为快速排序对于已经排好序的数列有着较差的性能,有时我们可以通过在算法中引入随机性,从而使得算法对于所有的输入都能获得较好的性能。很多人都选择随机化版本的快速排序作为大数据输入情况下的排序算法。比较一般的方法是显式的对输入进行重新排列,使得算法随机化。对于快速排序来说,如果采用一种称为随机抽样的随机化技术,那么可以使分析变得更加简单。与始终采用A[r]作为主元的方法不同,随机抽样是从子数组A[p…r]中随机选择一个元素作为主元。随机化快速排序的实现随机取样这种随机方法对于partit

2020-11-20 19:10:32 251

原创 算法导论的C++实现——5.快速排序

快速排序概述对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn),而且O(nlgn)中隐含的常数因子非常小。快速排序的描述与归并排序一样,快速排序也使用了分治思想。下面是对一个典型的子数组A[p…r]进行快速排序的三步分治过程:分解:数组A[p…r]被划分为两个(可能为空)子数组A[p…q - 1]和A[q + 1…r],使得A[p…q

2020-11-13 20:12:16 211

原创 算法导论的C++实现——4.优先队列的原理与实现

一、优先队列优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。一个最大优先队列支持以下操作:Insert(S, x):把元素x插入集合S中。Maximum(S):返回S中具有最大键字的元素。ExtractMax(S):去掉并返回S中的具有最大键字的元素。IncreaseKey(S, x, k):将元素x的关键字值增加到k,这里假设k的值不小于x的原关键字值。我们用已经建成的堆来实现以上操作(点击回顾堆排序)二、功能Maximum的实现过

2020-10-26 19:06:43 669 1

原创 算法导论的C++实现——3.堆排序

一、堆排序的性质堆又称二叉堆,是一个近似完全二叉树,最大堆性质是指除了根以外的所有节点i都要满足:A[parent(i)] >= A[i]冒泡排序和插入排序都是不需要额外内存,但时间复杂度较高;归并排序的时间复杂度更小,但它需要额外的内存。而堆排序结合了两者的优点,能够做到既有归并排序的低时间复杂度,又有冒泡与插入的低空间复杂度。后面介绍的快速排序的性能一般高于堆排序,一般用于大数组排序。维护堆的性质函数MaxHeapify适用于维护最大堆性质的重要过程:void MaxHeapify(in

2020-10-23 10:50:32 227

原创 算法导论的C++实现——2.分治策略处理最大子数组

一、一般解法(线性求解法)有一个非分治策略的处理最大子数组的问题,该解法更优雅简洁,并更高效。之所以专门去写分治法是为了更好地理解树形结构。该方法的核心思想就是当sum小于零就舍弃当前sum,有个小bug就是全为负数,不过很好解决,一下是源代码://线性求最大子区间#include<iostream>using namespace std;constexpr int maxn = 200;const int INF = 0x3f3f3f3f;int main(){ int n

2020-10-21 11:45:10 267

原创 算法导论的C++实现——1.归并排序

一、分治的原理归并排序是最简单的利用分治思想的例子分治模式在每层递归时都有3个步骤:分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。解决这些子问题,递归地求解各子问题。然而,若子问题的规模足够小,则直接求解。合并这些子问题的解成原问题的解二、归并排序的原理归并排序算法完全遵循分治模式。直观上其操作如下:**分解:**分解待排序的n个元素的序列成各具n/2个元素的两个子序列。**解决:**使用归并排序自底向上的递归排序两个子序列。**合并:**合并两个已排序的子序列以产生已排序

2020-10-20 10:42:57 160

原创 2019牛客暑期多校训练营(第七场)E Find the median题解(极其复杂的离散化)

涉及一个很复杂的离散化和线段树的区间更新区间查询,目前代码看不懂,需要时间再研究xls代码:#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 8e5 + 10;ll sum[maxn * 4];int S[maxn], L[maxn], R[...

2019-08-09 16:36:15 142

原创 2019杭电多校Problem 5 Snowy Smile题解

转化为维护最大连续子串和#include<bits/stdc++.h>#define ll long long#define pi pair<int, ll>#define mk make_pairusing namespace std;const int maxn = 2010;struct node { int x, y; ll...

2019-08-07 20:04:39 220

原创 滚动数组的实现

#include<bits/stdc++.h>using namespace std;int dp[2][maxn]int main(){ for(int i = 1; i <= n; i++) { for(int j = 0; j <= w; j++) { if(j < w[i]) ...

2019-07-28 20:17:46 273

原创 校赛题解

题意很好理解,需要优先队列#include<bits/stdc++.h>using namespace std;const int maxn = 1e5 + 5;typedef long long int ll;struct Node{ ll a, b, num1, num2; bool operator < (const Node y) c...

2019-07-27 16:23:58 156

原创 2019牛客暑期多校训练营(第一场)题解

JFraction Comparision题意:给出x, a, y, b, 判断x / a与y / b的大小思路:数字太大需要大数,计算x * b与y *a的大小,再判断实现:JAVA大数import java.math.BigInteger;import java.util.*;public class Main { public static void ...

2019-07-19 16:26:11 178

原创 数据结构专题

2019/7/15,重新开始数据结构的训练,这是记录,从字符串开始。附刘汝佳白书题库:https://vjudge.net/article/61前缀树:https://www.cnblogs.com/luosongchao/p/3239521.htmlhttps://www.cnblogs.com/justinh/p/7716421.htmlhttps://www.cnblog...

2019-07-15 17:26:35 274

原创 Chiaki Sequence Revisited题解

首先顺着题目逻辑打表打表代码:#include<iostream>#include<string>#include<vector>using namespace std;int lowbit(int x){ return x&(-x);}int main(){ int N; int a[1007] = { 1,1 };...

2019-07-08 09:38:12 118

转载 矩阵快速幂中矩阵的构造

其实快速幂和矩阵快速幂是异曲同工,但是往往构造矩阵是难点,转载一个别人博客写的矩阵构造方法:Fibonacci数列:F(0)=1 , F(1)=1 , F(n)=F(n-1)+F(n-2)我们以前快速求Fibonacci数列第n项的方法是 构造常系数矩阵(一) Fibonacci数列f[n]=f[n-1]+f[n-2],f[1]=f[2]=1的第n项快速求法(不考虑高精度)...

2019-07-07 18:51:44 181

原创 Codeforces Round #567 (Div. 2) B. Split a Number题解

B. Split a Numbertime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputDima worked all day and wrote down on a long paper strip his fa...

2019-07-02 16:25:05 298

原创 Codeforces Round #402 (Div. 2)题解

A. Pupils Redistributionhttps://codeforces.com/contest/779/problem/A题意就是把数字1到5平均分到两个班内,题水但是判定容易出BUG#include<bits/stdc++.h>using namespace std;constexpr int maxl = 6;int numa[maxl], num...

2019-06-04 10:52:09 171

原创 马拉车模板题

链接:https://ac.nowcoder.com/acm/problem/23501来源:牛客网题目描述小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的。所以小A只想知道给定的一个字符串的最大回文子串是多少,但是小A对这个结果并不是非常满意。现在小A可以对这个字符串做一些改动,他可以把这个字符串最前面的某一段连续的字符(不改变顺序)移动到原先字符串的末尾。那么请问小A...

2019-05-07 21:00:49 337

原创 洛谷P1880 [NOI1995]石子合并

这题是区间DP的模板题,发布题解的大佬用心良苦,故意把输入改了,一般需要把整个程序逻辑理解透彻才会知道哪里要改。具体逻辑大佬讲的非常清楚,接下来是给代码时间:#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include &l...

2019-05-07 19:50:21 155 1

转载 同余定理【数论】

转载传送门:https://blog.csdn.net/qq_36345036/article/details/77407069同余定理是数论中的重要概念。给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。同余符号两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对模m同余或a同余...

2019-04-26 17:40:11 494

原创 洛谷 P1091 合唱队形 题解(最长单调子序列)

https://www.luogu.org/problemnew/show/P1091题目描述NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他们的身高分别为T_1,T_2,…,T_KT1​,T2​,…,TK​, 则他们的身高满足T_1<......

2019-04-26 17:19:58 355

原创 Codeforces Round #554 (Div. 2) Problem B. Neko Performs Cat Furrier Transform

https://codeforces.com/contest/1152/problem/B大致思路是找到二进制n的第一个0, 然后模拟,与位操作有关#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cst...

2019-04-26 09:46:52 94

原创 二维容器Vector动态初始化

今天又是自闭的一天,看一下自闭之后能获得哪些新知识呢vector<vector<int> > a;int ans[maxn * maxn];int main(){ int n, m, d, q; cin >> n >> m >> d >> q; a = vector<vector<int>...

2019-04-23 18:18:03 1168

原创 计算矩阵链乘法括号化方案的程序

这是个时间复杂度为n^3, 空间复杂度为n^2的DP具体思路见算法导论P211#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string>...

2019-04-16 18:57:48 371

原创 洛谷P1028 数的计算

这题是递归加打表加DP(给大佬ORZ)打表代码:#include<iostream>using namespace std;int sum = 0;void dfs(int n){ sum++; if (n == 1) return; for (int i = 1; i <= n / 2; i++) dfs(i);}int main(){ in...

2019-04-04 01:10:11 133

原创 April Fools Day Contest 2019 A. Thanos Sort题解

愚人节专场比我想象的难一些(太菜了)代码来自一个博客:https://blog.csdn.net/qq_38185591/article/details/88966801题目链接:https://codeforces.com/contest/1145/problem/A主要考验dfs能力,我第一次写了110行代码没过卡题贴代码:#include<algorithm&...

2019-04-02 23:45:33 224

原创 Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization题解

https://codeforces.com/contest/1133/problem/D#include&lt;algorithm&gt;#include &lt;iostream&gt;#include &lt;sstream&gt;#include &lt;cstring&gt;#include &lt;cstdlib&gt;#include &lt;string&...

2019-03-12 20:19:16 96

原创 Codeforces Round #544 (Div. 3) B. Preparation for International Women's Day题解

https://codeforces.com/contest/1133/problem/B#include&lt;algorithm&gt;#include &lt;iostream&gt;#include &lt;sstream&gt;#include &lt;cstring&gt;#include &lt;cstdlib&gt;#include &lt;string&...

2019-03-12 18:42:27 958

原创 Codeforces Round #529 (Div. 3) C. Powers Of Two题解及思路

        time limit per test 1 second memory limit per test 256 megabytes inputstandard input output standard output Ivan wants to play a game with you. He picked some string ss of length nn consis...

2018-12-28 21:15:55 193

原创 洛谷 P1047 校门外的树(线段树版)

https://www.luogu.org/problemnew/show/P1047第一次脱离模板写线段树题目(洛谷的线段树模板题太变态了)。言归正传,这是一个未完成版的线段树,因为一直到最后都没有发现为什么第一组数据会WA.后来苦心研究之后,发现线段树处理0的时候会有问题,于是想了两个解决办法应对该情况。这个题目唯一的坑点在于从0开始,意思是输入的500实质上有501棵树,而线段树的结...

2018-11-19 21:44:04 201

转载 NOIP选手必知的编程技巧

作者:StudyingFatherhttps://studyingfather.blog.luogu.org/some-coding-tips-for-oiers本文将给各位介绍一些无论是平时训练或者参加比赛时都比较有用的编程技巧,它们可以让我们的程序可读性更强,方便我们的调试,有些技巧甚至可以帮助我们获得更多的分数。文章地址:https://studyingfather.blog.l...

2018-11-12 22:18:36 351

转载 洛谷资源

2018年洛谷日报索引11 月#85[chengni]图论的小技巧以及扩展https://www.luogu.org/blog/chengni5673/tu-lun-di-xiao-ji-qiao-yi-ji-kuo-zhan#84[Mathison]数字组成的奥妙——数位dphttps://www.luogu.org/blog/virus2017/shuweidp#83[小老虎3...

2018-11-08 19:41:08 1094

原创 例题6-8 树(Tree,UVa 548)(刘汝佳算法竞赛)

#include&lt;algorithm&gt;#include &lt;iostream&gt;#include &lt;sstream&gt;#include &lt;cstring&gt;#include &lt;cstdlib&gt;#include &lt;string&gt;#include &lt;vector&gt;#include &l

2018-08-07 16:50:14 260

原创 简单的内存池

在使用指针时,内存的分配是一个很头疼的问题,为了防止内存溢出,以二叉树为例搭建一个简单的内存池。queue&lt;Node *&gt;freenodes;Node node[maxn];void init(){ for (int i = 0; i &lt; maxn; i++) freenodes.push(&amp;node[i]);//初始化内存池}Node * newn...

2018-08-07 10:33:40 107

原创 Problem L. Visual Cube题解(一个有意思的题目)

题目分析:Problem DescriptionLittle Q likes solving math problems very much. Unluckily, however, he does not have good spatial ability. Everytime he meets a 3D geometry problem, he will struggle to dra...

2018-07-31 14:22:34 320

原创 希尔排序

      希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。        实现希尔排序的一种方法是对于每个h,用插入排序将h个子数组独立地排序。但因为子数组是相互独立的,一个简单的方法是在h-子数组中将每个元素交换到比它大的元素之前去(将比它大的元素向右移动一格)。只需要在插入排序的代码中移动元素的距离由1改为h即可。这...

2018-07-22 15:25:58 157

原创 C++实现插入排序算法

#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;Windows.h&gt;using namespace std;int main(){ char mid; string a; getline(cin, a); int N = a.size(); for(int i = 1; i &lt; N;++i) ...

2018-07-21 16:58:44 201

原创 C++primer第五版的Sales_data程序(版本V2.0)

相对于V1.0,有如下改动:1.由struct类型替换成了class类型并进行封装2.添加了新的接口函数add()3.将接口函数更改为Sales_data的友元函数4.添加了能够使Sales_data进行初始化的构造函数#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;Windows.h&gt;using namespace ...

2018-07-11 16:36:11 748

原创 C++primer第五版的Sales_data程序(版本V1.0)

#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;Windows.h&gt;using namespace std;struct Sales_data { double Sales_data::avg_price() const { if (units_sold) return revenue / units_s...

2018-07-11 14:44:37 319

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除