
C++
VigiIante
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法导论的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 · 321 阅读 · 0 评论 -
算法导论的C++实现——6.计数排序(第八章线性排序)
比较排序的局限性比较排序的性质:在最终结果中,各元素的次序依赖于他们之间的比较。我们把这类排序算法称为比较排序。通过决策树模型可以得到结论:在最坏的情况下,任何比较排序算法都需要做O(nlgn)次比较。而且归并排序和堆排序是渐进最优的比较排序算法。线性排序接下来我们讨论三个线性复杂度的排序算法:计数排序、基数排序和桶排序。**这些算法是用运算而不是比较排序来确定顺序的。**因此下界O(nlgn)对他们是不适用的。计数排序的基本思想计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数原创 2020-11-21 21:09:29 · 202 阅读 · 0 评论 -
算法导论的C++实现——5.1快速排序的随机化版本
快速排序的局限性因为快速排序对于已经排好序的数列有着较差的性能,有时我们可以通过在算法中引入随机性,从而使得算法对于所有的输入都能获得较好的性能。很多人都选择随机化版本的快速排序作为大数据输入情况下的排序算法。比较一般的方法是显式的对输入进行重新排列,使得算法随机化。对于快速排序来说,如果采用一种称为随机抽样的随机化技术,那么可以使分析变得更加简单。与始终采用A[r]作为主元的方法不同,随机抽样是从子数组A[p…r]中随机选择一个元素作为主元。随机化快速排序的实现随机取样这种随机方法对于partit原创 2020-11-20 19:10:32 · 331 阅读 · 0 评论 -
算法导论的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 · 287 阅读 · 0 评论 -
算法导论的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 · 788 阅读 · 1 评论 -
算法导论的C++实现——3.堆排序
一、堆排序的性质堆又称二叉堆,是一个近似完全二叉树,最大堆性质是指除了根以外的所有节点i都要满足:A[parent(i)] >= A[i]冒泡排序和插入排序都是不需要额外内存,但时间复杂度较高;归并排序的时间复杂度更小,但它需要额外的内存。而堆排序结合了两者的优点,能够做到既有归并排序的低时间复杂度,又有冒泡与插入的低空间复杂度。后面介绍的快速排序的性能一般高于堆排序,一般用于大数组排序。维护堆的性质函数MaxHeapify适用于维护最大堆性质的重要过程:void MaxHeapify(in原创 2020-10-23 10:50:32 · 300 阅读 · 0 评论 -
算法导论的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 · 351 阅读 · 0 评论 -
洛谷P1880 [NOI1995]石子合并
这题是区间DP的模板题,发布题解的大佬用心良苦,故意把输入改了,一般需要把整个程序逻辑理解透彻才会知道哪里要改。具体逻辑大佬讲的非常清楚,接下来是给代码时间:#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include &l...原创 2019-05-07 19:50:21 · 241 阅读 · 1 评论 -
马拉车模板题
链接:https://ac.nowcoder.com/acm/problem/23501来源:牛客网题目描述小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的。所以小A只想知道给定的一个字符串的最大回文子串是多少,但是小A对这个结果并不是非常满意。现在小A可以对这个字符串做一些改动,他可以把这个字符串最前面的某一段连续的字符(不改变顺序)移动到原先字符串的末尾。那么请问小A...原创 2019-05-07 21:00:49 · 374 阅读 · 0 评论 -
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 · 306 阅读 · 0 评论 -
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 · 349 阅读 · 0 评论 -
校赛题解
题意很好理解,需要优先队列#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 · 190 阅读 · 0 评论 -
滚动数组的实现
#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 · 321 阅读 · 0 评论 -
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 · 180 阅读 · 0 评论 -
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 · 265 阅读 · 0 评论 -
二维容器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 · 1250 阅读 · 0 评论 -
洛谷 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 · 396 阅读 · 0 评论 -
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 · 150 阅读 · 0 评论 -
C++解决ACM直播状态输出控制
题目:在比特镇举行的中国大学生程序设计竞赛CCPC(China Collegiate Programming Contest)开始啦!这次比赛中加入了现场视频直播,而在直播屏幕的左下角,会显示评测队列。 比特镇的科技水平并不发达,直播分辨率并不高。准确地说,每个评测记录将被显示在11行3838列的像素格上。一条评测记录由44个部分组成,从左往右依次为排名(33像素),队名(1616像素),题号(4...原创 2018-06-25 21:25:11 · 636 阅读 · 0 评论 -
C++primer第五版的Sales_data程序(版本V1.0)
#include<iostream>#include<string>#include<Windows.h>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 · 372 阅读 · 0 评论 -
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 · 168 阅读 · 0 评论 -
C++实现插入排序算法
#include<iostream>#include<string>#include<Windows.h>using namespace std;int main(){ char mid; string a; getline(cin, a); int N = a.size(); for(int i = 1; i < N;++i) ...原创 2018-07-21 16:58:44 · 238 阅读 · 0 评论 -
希尔排序
希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。 实现希尔排序的一种方法是对于每个h,用插入排序将h个子数组独立地排序。但因为子数组是相互独立的,一个简单的方法是在h-子数组中将每个元素交换到比它大的元素之前去(将比它大的元素向右移动一格)。只需要在插入排序的代码中移动元素的距离由1改为h即可。这...原创 2018-07-22 15:25:58 · 194 阅读 · 0 评论 -
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 · 389 阅读 · 0 评论 -
简单的内存池
在使用指针时,内存的分配是一个很头疼的问题,为了防止内存溢出,以二叉树为例搭建一个简单的内存池。queue<Node *>freenodes;Node node[maxn];void init(){ for (int i = 0; i < maxn; i++) freenodes.push(&node[i]);//初始化内存池}Node * newn...原创 2018-08-07 10:33:40 · 148 阅读 · 0 评论 -
例题6-8 树(Tree,UVa 548)(刘汝佳算法竞赛)
#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string>#include <vector>#include &l原创 2018-08-07 16:50:14 · 333 阅读 · 0 评论 -
洛谷 P1047 校门外的树(线段树版)
https://www.luogu.org/problemnew/show/P1047第一次脱离模板写线段树题目(洛谷的线段树模板题太变态了)。言归正传,这是一个未完成版的线段树,因为一直到最后都没有发现为什么第一组数据会WA.后来苦心研究之后,发现线段树处理0的时候会有问题,于是想了两个解决办法应对该情况。这个题目唯一的坑点在于从0开始,意思是输入的500实质上有501棵树,而线段树的结...原创 2018-11-19 21:44:04 · 264 阅读 · 0 评论 -
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 · 237 阅读 · 0 评论 -
Codeforces Round #544 (Div. 3) B. Preparation for International Women's Day题解
https://codeforces.com/contest/1133/problem/B#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string&...原创 2019-03-12 18:42:27 · 1131 阅读 · 0 评论 -
Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization题解
https://codeforces.com/contest/1133/problem/D#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string&...原创 2019-03-12 20:19:16 · 140 阅读 · 0 评论 -
洛谷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 · 188 阅读 · 0 评论 -
April Fools Day Contest 2019 A. Thanos Sort题解
愚人节专场比我想象的难一些(太菜了)代码来自一个博客:https://blog.youkuaiyun.com/qq_38185591/article/details/88966801题目链接:https://codeforces.com/contest/1145/problem/A主要考验dfs能力,我第一次写了110行代码没过卡题贴代码:#include<algorithm&...原创 2019-04-02 23:45:33 · 292 阅读 · 0 评论 -
计算矩阵链乘法括号化方案的程序
这是个时间复杂度为n^3, 空间复杂度为n^2的DP具体思路见算法导论P211#include<algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string>...原创 2019-04-16 18:57:48 · 429 阅读 · 0 评论 -
C++语言使用容器解决奇偶数分离的问题
题目链接:http://nyoj.top/problem/11这里使用了容器嵌套解决了输出格式的问题。#include<iostream>#include<vector>using namespace std;#define I 30#define N 10000int main(){ int i, j, k, n; char m; vector<v...原创 2018-06-21 21:41:35 · 551 阅读 · 0 评论