c++
CoderZhuuu
practice
展开
-
C++实现智能指针部分功能(UniquePtr, SmartPtr, WeakPtr), head only(更新中)
先放代码#pragma once#include <memory> /* For std::move, std::forward, std::unique_ptr */#include <utility> /* For std::exchange */#include <type_traits> /* For template check */#include <atomic> /* For std::atomic *//* Deleter原创 2021-05-10 20:48:50 · 290 阅读 · 0 评论 -
模板小练习
使用模板创建和删除单向链表struct ListNode { int val; ListNode* next; ListNode(const int& _val = int(), ListNode* _next = nullptr) : val(_val), next(_next) {}};template<typename ...Args>ListNode* CreateList(const int& val, Args&&... args)原创 2021-03-26 17:18:30 · 142 阅读 · 0 评论 -
c++ 实现递归/非递归二叉树遍历
TreeNode数据结构struct TreeNode { int val; TreeNode * left; TreeNode * right; TreeNode(const int & _val = int(), TreeNode * _left = nullptr, TreeNode * _right = nullptr) : val(_val), left(_le...原创 2020-04-23 15:22:47 · 171 阅读 · 0 评论 -
洛谷 P1678 烦恼的高考志愿
P1678 烦恼的高考志愿二分法(200+ms)#include <cstdio>#include <algorithm>#define MAXN 100010#define RE registerusing namespace std;int a[MAXN];int b[MAXN];inline int read() { int x = 0;...原创 2020-04-20 18:57:14 · 320 阅读 · 0 评论 -
洛谷 P1873 砍树
P1873 砍树二分答案(300+ms)#include <cstdio>#include <algorithm>#define MAXN 1000100#define LL long long#define RE registerusing namespace std;LL a[MAXN];inline LL read() { LL x = ...原创 2020-04-20 16:56:32 · 516 阅读 · 0 评论 -
洛谷 P1102 A-B 数对
P1102 A-B 数对二分查找解法(100+ms)#include <cstdio>#include <algorithm>#define MAXN 200020using namespace std;int a[MAXN];inline int read() { int x = 0, sign = 0; char c = getchar();...原创 2020-04-20 11:50:46 · 344 阅读 · 0 评论 -
洛谷 P2249 【深基13.例1】查找
P2249 【深基13.例1】查找常规版本(400+ms)#include <iostream>#define MAXN 1000010using namespace std;int a[MAXN];int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n ...原创 2020-04-20 11:14:25 · 538 阅读 · 1 评论 -
c++ AVL树 插入 删除
AVL树的插入很简单,根据BST树的特性插入之后在回溯的过程中调整即可AVL树的删除也不是很难,一共有三种情况第一种是左子树为空(右子树为不为空无所谓)第二种是右子树为空(此时左子树不为空)这两种直接用另一半子树覆盖当前节点然后删除再回溯调整树即可第三种是左右子数都不为空这个情况首先找到要删除的节点,然后找到比该节点大的节点中最小的一个节点(右子树中最左边的节点),或者比该...原创 2020-04-14 21:41:59 · 1005 阅读 · 1 评论 -
c++ 随机生成数独(不保证唯一解)
给出一个最简单的生成数独初盘的程序,不保证有唯一解,终盘的正确性通过填充的过程来确定,可以用舞蹈链算法求解该数独得到其中一个解随机生成的方法就算交换行和列然后随机挖洞这里有一点要注意的就是交换的行和列必须处于同一宫中,要不然交换之后保证不了正确性然后就是随机挖洞,可以直接随机一个坐标,或者用洗牌算法(类似于扫雷初盘的生成)vector<vector<int> &...原创 2020-04-08 20:44:04 · 1155 阅读 · 0 评论 -
c++ 舞蹈链算法求解数独问题 控制台版本 带注释
#include <iostream>#include <vector>#include <algorithm>#include <unordered_map>#define DELPOINTER(p) if(nullptr!=(p)){delete[] (p),(p)=nullptr;}#define DO(sth) for (DLXN...原创 2020-04-08 09:15:30 · 834 阅读 · 0 评论 -
c++ spfa 链式前向星版本加上SLF优化版本的实现
普通版本#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <cstdio>#include <limits.h>const int INF = 0x3f3f3f3f;const int MAXN...原创 2020-04-03 19:07:55 · 220 阅读 · 0 评论 -
c++ Bullman-Ford算法前向星版本实现
#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <cstdio>#include <limits.h>using namespace std;const int INF = 0x3f3f3f3f;...原创 2020-04-03 19:06:25 · 165 阅读 · 0 评论 -
c++ Dijsktra算法邻接表版本和链式前向星版本的实现(堆优化版本)
邻接表版本#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <cstdio>#include <limits.h>const int INF = 0x3f3f3f3f;const int MAX...原创 2020-04-03 18:45:57 · 225 阅读 · 0 评论 -
c++ 二维凸包 Graham 扫描线算法模板
该算法是在gift-warping算法的基础上通过排序来预处理数据然后降低时间复杂度的#include <iostream>#include <memory>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>#inclu...原创 2020-03-31 11:09:16 · 525 阅读 · 0 评论 -
c++ Java 二维凸包 Andrew 算法模板
模板题链接 P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包先排序(先按 y 再按 x ),然后计算凸包,一共两次扫描,第一次计算下凸包,第二次计算上凸包(计算上凸包的时候可以不用判断top,如果要判断可以加一个top大于下凸包的元素个数)附上c++模板#include <iostream>#include <memory...原创 2020-03-31 01:19:34 · 280 阅读 · 0 评论 -
c++ 实现变进制数
#include <iostream>#include <memory>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;#de...原创 2020-03-07 15:01:40 · 217 阅读 · 0 评论 -
位运算小技巧总结(更新中 2020/4/24)
想到哪写到哪交换两个数字void swap(int & a, int & b){ a ^= b; b ^= a; a ^= b;}判断奇偶if(1 == (n & 1)) // 奇数if(0 == (n & 1)) // 偶数取余数n % x 相当于 n & (x - 1)乘以二和除以...原创 2020-03-03 01:07:35 · 225 阅读 · 0 评论 -
四平方数和定理 leetcode 279 完全平方数
记录一下四平方数和定理的解法int numSquares(int n) { while (0 == (n & 0x3)) { n >>= 2; } if (7 == (n & 0x7)) { return 4; } for (int i = sqrt(n); i > 0; --i) { int j = sqrt(n - i * i);...原创 2020-03-02 23:22:03 · 200 阅读 · 0 评论 -
洛谷 P3368 树状数组(区间修改 单点查询)
就是区间修改和单点查询,这个题目可以用来检查自己写的对不对#include <iostream>#define lowbit(x) (x)&(-(x))using namespace std;int n;int c[5000005];int a[5000005];void update(int x, const int & val) { while ...原创 2020-03-01 22:35:20 · 168 阅读 · 0 评论 -
洛谷 P1428 小鱼比可爱 树状数组解法
题目描述人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮...原创 2020-03-01 21:28:09 · 323 阅读 · 0 评论 -
线段树和树状数组(记录一下模板)
线段树(单点修改,区间查询)vector<int> seg; // 线段树数组void segUpdate(const int & k) { seg[k] = seg[k << 1] + seg[k << 1 | 1];}void build(const int & k, const int & l, const int &...原创 2020-03-01 14:00:59 · 185 阅读 · 0 评论 -
c++实现最坏时间为线性时间的快速选择算法
上图是算法导论第三版第九章9.3所给出的步骤,根据这个步骤可以得到下面的代码/* 找中位数,只有五个数,直接排序取中间那个即可 */int findMedian(vector<int> & nums, const int & left, const int & right) { sort(nums.begin() + left, nums.begi...原创 2020-02-28 00:09:51 · 496 阅读 · 0 评论 -
蓝桥杯_算法训练_最大最小公倍数
试题 算法训练 最大最小公倍数提交此题 资源限制时间限制:1.0s 内存限制:256.0MB问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 <= N <= 106。...原创 2020-02-04 20:29:11 · 169 阅读 · 0 评论 -
蓝桥杯_算法训练_区间k大数查询
试题 算法训练 区间k大数查询提交此题 资源限制时间限制:1.0s 内存限制:256.0MB问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个...原创 2020-02-04 19:50:57 · 163 阅读 · 1 评论 -
hdu_problem_2081_手机短号
/**Problem Description*大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。*现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?***Input*输入数据的第一行是一个N(N &l...原创 2019-03-25 14:05:15 · 270 阅读 · 0 评论 -
hdu_problem_2070_Fibbonacci Number
/**Problem Description*Your objective for this question is to develop a program which will generate a fibbonacci number. The fibbonacci function is defined as such:**f(0) = 0*f(1) = 1*f(n) = f(n...原创 2019-03-25 14:03:50 · 120 阅读 · 0 评论 -
c++:螺旋输出
#include<iostream>#include<iomanip>using namespace std;void Spiraloutput() { cout << "■■■■■■■■■■■■■■■■■■■" << endl; cout << "■ 螺旋输出 ■&qu原创 2019-01-10 11:20:26 · 522 阅读 · 0 评论 -
大数加法,减法,乘法
方法:利用string储存一个数字,然后利用加减法的规则进行运算。加法:各数位对齐,然后进行加减,若相加大于’9’则进位。减法:方法同加法,但是要处理被减数与减数的大小问题,所以需要多加一个判断条件。乘法:利用多项式的思想,例如123∗123=123∗1∗102+123∗2∗101+123∗3∗100=12300∗1+1230∗2+123∗3123*123=123*1*10^2+123*2*...原创 2019-01-19 16:43:41 · 219 阅读 · 0 评论 -
计算字符串的长度
#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;int main() { string s; cin &gt;&gt; s; const char * p = s.c_str(); int len = 0; while (*p++) len++; cout &lt;&原创 2019-01-07 22:10:39 · 797 阅读 · 0 评论 -
编写一个字符串类,实现将字符串中的相邻重复字符去掉功能,并输出最终的结果。
#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;int main(){ string s; cin &gt;&gt; s; for (int i = 1; i &lt; s.size(); i++) { if (s.at(i) == s.at(i - 1)) { s.erase(i原创 2019-01-07 21:59:11 · 1621 阅读 · 0 评论 -
递归求组合数
#include&lt;iostream&gt;using namespace std;// 组合数公式 C(n,k) = C(n - 1,k) + C(n - 1, k - 1);int zuhe(int n,int k) { if (n == k || k == 0) return 1; else return zuhe(n - 1, k) + zuhe(n - 1, k - 1);...原创 2019-01-07 21:57:17 · 3187 阅读 · 0 评论 -
构造函数与析构函数测试
#include&lt;iostream&gt;using namespace std;class C {public: C() { cout &lt;&lt; "construct C" &lt;&lt; endl; } ~C() { cout &lt;&lt; "distruct C&原创 2019-01-07 21:49:52 · 227 阅读 · 0 评论 -
复数类
Complex.cpp#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;cmath&amp;amp;gt;#include&amp;quot;Complex.h&amp;quot;using namespace std;Complex::Complex(double r, double i) { m_real = r;原创 2019-01-07 21:43:52 · 1126 阅读 · 0 评论 -
hdu_problem_2098_分拆素数和
先用筛选法找素数打表,然后从小到大开始判断#include<iostream>using namespace std;int Prime[1230];int main() { int count = 0; bool *isPrime[10000]; memset(isPrime, 1, sizeof(isPrime));// 先初始化成全为素数 for (int i =...原创 2019-03-27 14:38:52 · 134 阅读 · 0 评论 -
单链表实现大数阶乘
单链表通过结构体表示struct ListNode{ int data; ListNode* next; ListNode(int data) { this->data = data; this->next = nullptr; }};typedef ListNode* List;大数阶乘的函数思路:链表的每一个结点存储一个3位数的值,每次从头结点开...原创 2019-07-23 11:21:14 · 4000 阅读 · 3 评论 -
单链表实现法雷序列
法雷序列节点的定义struct FareyListNode { int numerator; // 分子 int denominator; // 分母 FareyListNode *next; FareyListNode(int numerator, int denominator) { this->numerator = numerator; this->de...原创 2019-09-22 21:19:21 · 1592 阅读 · 2 评论 -
TopK算法
需要先在 "testData.txt" 文件里面输入M和N比如2000 10通过最小堆实现TopK最小堆通过数组模拟二叉树来实现#pragma warning(disable:4996)#pragma once#include <fstream>#include <ctime>const char* FILEIN = "testData.txt...原创 2019-09-25 20:01:11 · 1411 阅读 · 1 评论 -
车厢调度问题(队列和栈的实现)
根据队列和栈的性质队列找尾部最大的车厢号栈找尾部最小的车厢号栈、队列、数组可用STL或者自己实现#pragma once#include "vector.h"#include "queue.h"#include "stack.h"#include <fstream>const char* INPUTVECTORFILENAME = "carriagesRe...原创 2019-09-25 19:59:03 · 2843 阅读 · 0 评论 -
c++顺序表实现栈
通过capacity控制最大容量,超过就扩容,可以避免多次插入时的扩充操作template<class T>class Stack {public: Stack(); Stack(const size_t & length); Stack(const Stack<T> & s); ~Stack(); void push(const T ...原创 2019-09-23 19:36:12 · 220 阅读 · 0 评论 -
c++单链表实现队列
通过两个链表节点指针实现队列,一个当作队头,一个当作队尾,入队就是往尾节点后插入,退队就是删除头节点template<class T>struct ListNode { T data; ListNode<T> *next; ListNode(const T & data) { this->data = data; this->ne...原创 2019-09-23 19:07:57 · 788 阅读 · 0 评论