<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[devilboy恶魔男孩的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/QQQ899</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; QQQ899]]></copyright><item><title><![CDATA[蓝桥杯2017年省赛]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/108983382</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/108983382</guid><author>QQQ899</author><pubDate>Sun, 11 Oct 2020 14:38:22 +0800</pubDate><description><![CDATA[一.迷宫：广搜
1.数组清零：memset(flag, 0, sizeof(flag));
二.跳蚱蜢：广搜
1.广搜一般都要用node；
2.储存状态：用string，可以用swap函数；
3.状态（string）的去重：用set，insert()，allNode.find(nextStr) == allNode.end()；
4.记得q.pop()；
三.魔方状态：广搜
广搜：判断是否为广搜（每一步都有一个状态）、状态如何储存、状态如何变化、如何去重；
什么时候用深搜，什么时候用广搜：深搜：遍历、求所有]]></description><category></category></item><item><title><![CDATA[2018-4扩展]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/108874708</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/108874708</guid><author>QQQ899</author><pubDate>Tue, 29 Sep 2020 19:56:43 +0800</pubDate><description><![CDATA[1.素数生成算法：输出 n 之内的所有素数
利用素数序列判断下一个数是不是素数；（每次加2，保证不是偶数）
代码：
#include&lt;cstdio&gt;
using namespace std;

int primes[105];
int main() {
	int n;
	scanf("%d", &amp;n);
	primes[0] = 2;
	primes[1] = 3;
	int cnt = 2;
	for(int i = 5; i &lt;= n; i += 2) {
		int flag]]></description><category></category></item><item><title><![CDATA[时间复杂度]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/108850604</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/108850604</guid><author>QQQ899</author><pubDate>Mon, 28 Sep 2020 17:38:44 +0800</pubDate><description><![CDATA[基本操作执行次数：

T(n) = 3n：线性

void eat1(int n){
    for(int i=0; i&lt;n; i++){;
        System.out.println("等待一天");
        System.out.println("等待一天");
        System.out.println("吃一寸面包");
    }
}


T(n) = 5logn：对数

void eat2(int n){
   for(int i=1; i&lt;n; i*=]]></description><category></category></item><item><title><![CDATA[蓝桥杯复习线 day2]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/108815316</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/108815316</guid><author>QQQ899</author><pubDate>Sun, 27 Sep 2020 08:47:56 +0800</pubDate><description><![CDATA[2018年省赛C++A组：
五.画图+递归
思路：找到递归三要素：
1.递归函数的作用：函数：void draw(char* buf, int w, int x, int y, int size)，画出以第Y+1行的第X个为中心的size*size大小的图；
2.递归结束条件：size=1，即只画一个；
3.如何缩小参数范围：即把size变成1，可以从“如何把第二个拆分成第一个入手”；
代码：
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
void s]]></description><category></category></item><item><title><![CDATA[蓝桥杯复习线 day1]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/108775243</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/108775243</guid><author>QQQ899</author><pubDate>Sat, 26 Sep 2020 22:10:46 +0800</pubDate><description><![CDATA[2018年省赛C++A组：
一.算术题；
另：
1.快速幂：
1).递归
long long binaryPow(long long a, long long b, long long m) {
 if(b == 0) return 1;
 if(b % 2 == 0) {
  long long mul = binaryPow(a, b / 2, m);
  return mul * mul % m;
 }
 else return binaryPow(a, b - 1, m) * a % m;
}
2)]]></description><category></category></item><item><title><![CDATA[《算法笔记》10.2 图的存储]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/106030072</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/106030072</guid><author>QQQ899</author><pubDate>Sun, 10 May 2020 00:25:47 +0800</pubDate><description><![CDATA[一.邻接矩阵
G[i][j] = 点 i 与点 j 之间的边的权值（或由 0/1 表示是否存在）；
适用于顶点数目不太大（&lt;=1000）的图；
二.邻接表
Adj[i] 存放顶点 i 的所有出边组成的列表，储存边的终点编号和边权；
如何实现：
1.链表；
2.vector：
示例一：
vector&lt;int&gt; Adj[N];
Adj[1].push_back(3);

示例二：
struct Node {
	int v; // 终点编号
	int w; //边权 
};
vector&lt;]]></description><category></category></item><item><title><![CDATA[《算法笔记》10.1 图的定义和相关术语]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/106030022</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/106030022</guid><author>QQQ899</author><pubDate>Sat, 09 May 2020 23:56:52 +0800</pubDate><description><![CDATA[1.G(V,E)：表示图G的顶点集为V，边集为E；
2.顶点的度：和该顶点相连的边的条数；
顶点的出度：出边条数；
顶点的入度：入边条数；
3.点权：顶点的权值；
边权：边的权值；

]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.8 哈夫曼树]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/106029441</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/106029441</guid><author>QQQ899</author><pubDate>Sat, 09 May 2020 23:22:55 +0800</pubDate><description><![CDATA[一.定义
叶子节点的带权路径长度：权值 * 根结点到叶子节点的路径长度；
树的带权路径长度：所有叶子节点的带权路径长度的和；
哈夫曼树：叶子节点的权值一样的树中带权路径长度最小的树；
构造哈夫曼树：不断合并两个权值相加最小的元素，直到只剩下一个元素为止；
示例：合并果子问题
#include&lt;cstdio&gt;
#include&lt;queue&gt;
using namespace std;
priority_queue&lt;long long, vector&lt;long long&gt;]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.7 堆]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105933472</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105933472</guid><author>QQQ899</author><pubDate>Tue, 05 May 2020 19:10:15 +0800</pubDate><description><![CDATA[一.定义
大顶堆：根结点最大的完全二叉树；
小顶堆：根结点最小的完全二叉树；
（以下以大顶堆为例）
用数组的形式定义堆：
const int maxn = 100;
int n;
int heap[maxn];

二.基本操作
1.建堆：
a.向下调整：（将当前结点与它的左右孩子节点比较，按照大小关系交换，若交换则继续与孩子节点比较）
void downAdjust(int low, int hi...]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.6 并查集]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105920697</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105920697</guid><author>QQQ899</author><pubDate>Tue, 05 May 2020 11:39:52 +0800</pubDate><description><![CDATA[一.定义
实现：int father[N];
father[i] = j; 表示 j 的父亲结点是 i；father[i] = i; 表示元素 i 是该集合的根结点；
二.基本操作
1.初始化
for(int i = 1; i &lt;= n; i++) father[i] = i;

2.查找
非递归实现：
int findFather(int x) {
	while(x != father[x...]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.5 平衡二叉树]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105911401</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105911401</guid><author>QQQ899</author><pubDate>Mon, 04 May 2020 15:24:48 +0800</pubDate><description><![CDATA[一.定义
平衡因子：左子树和右子树的高度差；
平衡二叉树：对任意结点，其平衡因子的绝对值不超过1的二叉查找树；
struct node {
	int v, height; // height：以当前结点为根结点的子树高度
	node* lchild;
	node* rchild;
}

二.基本操作
1.生成新结点：
node* newNode(int v) {
	node* Node = new...]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.4 二叉查找树]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105847396</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105847396</guid><author>QQQ899</author><pubDate>Sun, 03 May 2020 12:51:19 +0800</pubDate><description><![CDATA[一.定义
1.二叉查找树可以是一棵空树；
2.左子树所有结点的数据域均小于等于根结点，右子树所有结点的数据域均大于等于根结点；
二.基本操作
1.查找操作
void search(node* root, int x) {
	if(root == NULL) {
		printf("search failed\n");
		return;
	}
	if(x == root-&gt;data) pri...]]></description><category></category></item><item><title><![CDATA[浅层复制与深层复制]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105820006</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105820006</guid><author>QQQ899</author><pubDate>Tue, 28 Apr 2020 22:57:47 +0800</pubDate><description><![CDATA[浅层复制：利用默认复制构造函数，在析构时会出错（因为析构了两遍）

深层复制：利用成员函数

题目：
1.
T&amp; operator[](unsigned int i) ;
T&amp; operator[](unsigned int i)const; //为什么用 const？

DynamicArray&lt;int&gt; iarray(length,-1);
DynamicArray...]]></description><category></category></item><item><title><![CDATA[动态内存]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105812817</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105812817</guid><author>QQQ899</author><pubDate>Tue, 28 Apr 2020 17:44:40 +0800</pubDate><description><![CDATA[程序拥有：1.静态内存；2.栈内存；3.自由空间 / 堆（储存动态分配的对象）
一. new 与 delete 运算符
1.new 运算符
1).动态分配内存
new 表达式在自由空间构造一个 int 型（无名）对象，并返回该对象的指针：
int *pi = new int;

2).初始化对象
a.未显式初始化：默认初始化：内置类型或组合类型的值是未定义的，类类型用默认构造函数初始化；
int ...]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.3 树的遍历]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105793867</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105793867</guid><author>QQQ899</author><pubDate>Mon, 27 Apr 2020 23:18:21 +0800</pubDate><description><![CDATA[一.树的静态写法
1.结构体：
struct node {
	typename data;
	1.int child[maxn]; //指针域，maxn 为结点上限个数 
	2.vector child; //防止开辟的空间过大
}Node[maxn];

2.新建结点：
int index = 0;
int newNode(int v) {
	Node[index].data = v;
	Nod...]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.2 二叉树的遍历]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105783323</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105783323</guid><author>QQQ899</author><pubDate>Mon, 27 Apr 2020 16:16:10 +0800</pubDate><description><![CDATA[一.先序遍历
根结点——&gt; 左子树——&gt; 右子树
void preorder(node* root) {
	if(root == NULL) return;
	printf("%d\n", root-&gt;data);
	preorder(root-&gt;lchild);
	preorder(root-&gt;rchild);
}

性质：序列的第一个一定是根结点；
二.中序遍历
...]]></description><category></category></item><item><title><![CDATA[《算法笔记》9.1 树与二叉树]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105778469</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105778469</guid><author>QQQ899</author><pubDate>Sun, 26 Apr 2020 23:26:11 +0800</pubDate><description><![CDATA[一.树的定义与性质
1.空树：没有结点的树；
2.树的层次：根结点为第一层，根节点子树的根节点为第二层；
3.度：结点子树的棵树，叶结点度为0；
4.有 n 个结点的树，边数为 n - 1；
5.结点的深度：从根结点（深度为1）开始，自顶向下；
结点的高度：从叶结点（高度为1）开始，自底向上；
二.二叉树的递归定义
1.第一种情况：二叉树是空树；第二种情况：二叉树由根节点、左子树、右子树构成；
2...]]></description><category></category></item><item><title><![CDATA[《算法笔记》8.2 广度优先搜索]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105749647</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105749647</guid><author>QQQ899</author><pubDate>Sat, 25 Apr 2020 22:48:48 +0800</pubDate><description><![CDATA[一.广度优先搜索
1.基本写法：
void BFS(int s) {
	queue&lt;int&gt; q;
	q.push(s);
	while(!q.empty()) {
		取出队首元素 top;
		访问队首元素 top;
		将队首元素出队;
		将下一层结点中未曾入队的结点全部入队;
	}
}

2.示例一：

代码：
#include&lt;cstdio&gt;
#include&...]]></description><category></category></item><item><title><![CDATA[《算法笔记》8.1 深度优先搜索]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105737876</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105737876</guid><author>QQQ899</author><pubDate>Fri, 24 Apr 2020 22:59:45 +0800</pubDate><description><![CDATA[一.深度优先搜索
枚举所有完整路径以遍历所有情况；
实现方式：递归 / 非递归；
示例一：

void DFS(int index, int sumW, int sumC) {
	//终点：
	if(index == n) return; 
	//不选第 index 件物品：
	DFS(index + 1, sumW, sumC);
	//选第 index 件物品：
	if(w[index] + ...]]></description><category></category></item><item><title><![CDATA[《算法笔记》7.3 链表]]></title><link>https://blog.youkuaiyun.com/QQQ899/article/details/105627494</link><guid>https://blog.youkuaiyun.com/QQQ899/article/details/105627494</guid><author>QQQ899</author><pubDate>Fri, 24 Apr 2020 00:03:56 +0800</pubDate><description><![CDATA[一.链表的概念
1.分为数据域和指针域：
struct node {
	typename datd; //数据域
	node* next; //指针域
};

2.链表分为带头结点和不带头结点（头结点：data 不存放数据，next 指向第一个数据域有内容的结点）；

二.为新结点申请动态内存空间
1.malloc函数：（C语言）
头文件：#include&lt;stdlib.h&gt;；
返回类...]]></description><category></category></item></channel></rss>