<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Van0512的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Van0512</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Van0512]]></copyright><item><title><![CDATA[1050. 螺旋矩阵(25)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53329816</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53329816</guid><author>Van0512</author><pubDate>Fri, 25 Nov 2016 04:18:13 +0800</pubDate><description><![CDATA[分析：

/*
1. 算出m（行）、n（列）的值。
2. 由于n比较小，因此根据n算出矩阵的圈数。
3. 根据圈数填充矩阵
*/
核心处理部分就是矩阵的填充。
修改一下fillMatrix中圈数循环中各个小循环的边界，可以省略if语句，同时也成为了通用一些的螺旋矩阵填充算法（不论m、n的大小）。

#include 
#include 
#include 
using name]]></description><category></category></item><item><title><![CDATA[《C++ Primer》阅读感想]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53150761</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53150761</guid><author>Van0512</author><pubDate>Sun, 13 Nov 2016 19:34:42 +0800</pubDate><description><![CDATA[无疑的，《C++ Primer》是一本相当好的书，里面的内容相当丰富。
然而，或许是它太过于丰富了，作为primer，我始终认为它有所欠缺。
欠缺的，不是它的内容，而是它的知识框架。


我心中理想的C++指导书的样子，可以根据《C++ Primer》拆分成两本。
第一本，基础篇。
一、从类型、变量、表达式，到语句、函数。介绍这些语言的基本。
二、从类到封装、继承、多态。介绍其基本]]></description><category></category></item><item><title><![CDATA[碎碎念C++（一）冗杂问题]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53149309</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53149309</guid><author>Van0512</author><pubDate>Sun, 13 Nov 2016 15:32:40 +0800</pubDate><description><![CDATA[学习C++的这两个月，深刻觉得C++的语法实在是太复杂了，而且每一个新标准都添加了大量的东西。
然而，我擅自认为，有许多东西显得冗杂了些。
比如对动态内存的初始化有这么一种东西：
auto p = new auto(obj);
其含义是p指向一个与obj类型相同的对象，该对象用obj进行初始化。
第二个auto推断obj类型，第一个auto推断指针类型。
例如这个程序：
#inclu]]></description><category></category></item><item><title><![CDATA[02-线性结构3 Reversing Linked List   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53129510</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53129510</guid><author>Van0512</author><pubDate>Fri, 11 Nov 2016 15:49:00 +0800</pubDate><description><![CDATA[#include 
#include 
#include 
#include 
#include 
using namespace std;

struct Node{
    char addr[6];
    int data;
    char next[6];
};

int main(void) {
    string firstAddr;
    int n, k;
    cin ]]></description><category></category></item><item><title><![CDATA[01-复杂度2 Maximum Subsequence Sum   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53128666</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53128666</guid><author>Van0512</author><pubDate>Fri, 11 Nov 2016 14:46:12 +0800</pubDate><description><![CDATA[/*
 * 1. 最小的i和j
 * 2. 若序列全为0，输出头尾元素。
*/
#include 
using namespace std;

int main(void) {
    bool isNegative(true);  //记录序列是否全为负数
    int first(0), last(0);  //记录第一个和最后一个输入数据。
    //当前和、最大和、最小i、最小j、当前]]></description><category></category></item><item><title><![CDATA[11-散列2 Hashing   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53125296</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53125296</guid><author>Van0512</author><pubDate>Fri, 11 Nov 2016 04:58:56 +0800</pubDate><description><![CDATA[分析：
/*
 * quadratic probing 平方探测。
 * 增量 
 * 正数增量，不考虑负数增量。
*/


代码：
#include 
#include 
using namespace std;

bool isPrime(const int &n) {
    if(n < 2) return false;
    if(n > 2 && n%2 == 0)]]></description><category></category></item><item><title><![CDATA[11-散列3 QQ帐户的申请与登陆   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53125180</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53125180</guid><author>Van0512</author><pubDate>Fri, 11 Nov 2016 03:58:27 +0800</pubDate><description><![CDATA[使用STL，问题就变得简单了。
#include 
#include 
#include 
using namespace std;

int main(void) {
    int n;
    cin >> n;
    unordered_map myMap;
    myMap.reserve(n);

    char ch, id[20], pw[20];
    for(int ]]></description><category></category></item><item><title><![CDATA[11-散列1 电话聊天狂人   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53125103</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53125103</guid><author>Van0512</author><pubDate>Fri, 11 Nov 2016 02:23:47 +0800</pubDate><description><![CDATA[第一种方法，简单粗暴的用unordered_map装填数据，再导入到vector中，再排序。
使用unordered_map而不是map有几点好处：
1. 效率更高。
2. 有reserve函数，可以预备容量，控制内存不够的空间移动，进一步提高效率。
这样的运行时间是209ms
#include 
#include 
#include 
#include 
#include 
using]]></description><category></category></item><item><title><![CDATA[10-排序6 Sort with Swap(0, i)   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53123359</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53123359</guid><author>Van0512</author><pubDate>Thu, 10 Nov 2016 23:08:43 +0800</pubDate><description><![CDATA[表排序的典型题目。


分析：
/* 假设每个环的元素个数分别为m1, m2, ...
 * 其中，单一元素的环说明了该元素在正确的位置上，不考虑。多元素的环，所有元素都不在正确的位置上。
 *
 * 1. 第一个环（包括0的环），每次swap(0, i)，i是arr[0]的值，都把i置于正确的位置。
 * 最后一次同时把0和最后一个要交换的元素置于正确的位置，因此swap次数是 ]]></description><category></category></item><item><title><![CDATA[10-排序5 PAT Judge   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/53029628</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/53029628</guid><author>Van0512</author><pubDate>Fri, 04 Nov 2016 01:30:57 +0800</pubDate><description><![CDATA[排序规则：
1. 总分相同，名次相同。 

2. 总分相同，按照完全正确的题目数量排序。
3. 1、2一致，根据id排名。
4. 没有通过编译的，或者没有得分的，不列出。
5. 保证至少有一个人能出现在排名表上。

#include 
#include 
using namespace std;
const int QUESTIONS = 6;
const int MAXID = 1]]></description><category></category></item><item><title><![CDATA[AVL Tree解析]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52995161</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52995161</guid><author>Van0512</author><pubDate>Tue, 01 Nov 2016 13:45:13 +0800</pubDate><description><![CDATA[AVL树，最难理解的一点或许是——操作描述吧。~~~2333~~~
非常多的地方，让操作的描述跟人的思维习惯产生矛盾，实在很遗憾。
为此，我摒弃左单旋、右单旋、左右双旋、右左双旋这些叫法，而采用顺时针旋转和逆时针旋转来说明。


破坏平衡的条件有四种，其中两两成镜像。因此，只需要理解两种方式，对应成镜像的，相信也会顺其而然的理解了。

1. 往左孩子的左边插入一个节点
2. 往右孩]]></description><category></category></item><item><title><![CDATA[04-树5 Root of AVL Tree   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52987325</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52987325</guid><author>Van0512</author><pubDate>Mon, 31 Oct 2016 21:54:12 +0800</pubDate><description><![CDATA[/*
平衡二叉树（Balanced Binary Tree）（AVL Tree）
平衡因子（Balance Factor）：BF(T) = LHeight - RHeight
|BF| <= 1

调整：
1. 左子树的左边插入，LL插入：向右旋转（顺时针）。-> 为何叫做左单旋？唉，真是让人难以理解。
2. 右子树的右边插入，RR插入：向左旋转（逆时针）。
3. 左子树的右边插入，LR插入：对左]]></description><category></category></item><item><title><![CDATA[08-图7 公路村村通   (30分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52979250</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52979250</guid><author>Van0512</author><pubDate>Mon, 31 Oct 2016 05:41:58 +0800</pubDate><description><![CDATA[邻接表 + Prim算法。
#include 
#include 
#include 
using namespace std;

struct Edge {
    Edge(const int &a, const int &b, const int &w):
        indexA(a), indexB(b), weight(w) {}

    int indexA;
    int]]></description><category></category></item><item><title><![CDATA[最小生成树——Prim/Kruskal]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52979209</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52979209</guid><author>Van0512</author><pubDate>Mon, 31 Oct 2016 02:49:35 +0800</pubDate><description><![CDATA[本篇先用邻接矩阵示例。

假定图中有如下数据成员以及成员函数：

//邻接矩阵表示法
#ifndef GRAPH_H
#define GRAPH_H

#include "edge.h"

//template 
class Graph {
public:
    using T = char;
    ...
    void PrimMST(const int &index);    ]]></description><category></category></item><item><title><![CDATA[详解数据结构——图之邻接矩阵表示法]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52967578</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52967578</guid><author>Van0512</author><pubDate>Sat, 29 Oct 2016 22:54:38 +0800</pubDate><description><![CDATA[一、图的建立

图是表达“多对多”的关系的一种数据结构。
它由非空的有限顶点集合和有限边集合组成。
1. 顶点集合常常由数组表示。

数组下标表示顶点位置。
数组内容包含顶点数据，并且要添加判定是否被访问过的标志标量，为其余操作提供参数。
其数据类型定义如下：
struct Vertex {
    T data;
    bool isVisited;
}

2. 边]]></description><category></category></item><item><title><![CDATA[1076. Forwards on Weibo (30)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52963579</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52963579</guid><author>Van0512</author><pubDate>Sat, 29 Oct 2016 11:48:15 +0800</pubDate><description><![CDATA[GitHub加载慢得让人想哭。
虽然博客广告多，也只能先发在这里了，什么时候觉得太闲了，那时再去搞个个人网站。


用邻接表表存储图的边。

这道题，我第一次提交的时候最后一个测试用例的运行时间是1200+ms！
左思右想，左改右改，始终不知其然。后来参考了别的小伙伴的代码，把使用作为链表的forward_list改成vector，立马提速到100+ms。
至今还不知道为何使用链表]]></description><category></category></item><item><title><![CDATA[09-排序3 Insertion or Heap Sort   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52962091</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52962091</guid><author>Van0512</author><pubDate>Sat, 29 Oct 2016 01:55:09 +0800</pubDate><description><![CDATA[这道题跟上一道很相似，不同的地方在于Heap Sort的处理。
1. 找到下一个要和根节点交换（堆排序）的元素的下标。
2. 利用“下滤”，做一次堆排序。


#include 
#include 
using namespace std;

bool isHeapSort(int *init, int *arr, int n);
int getNextHeapSortIndex(int]]></description><category></category></item><item><title><![CDATA[09-排序2 Insert or Merge   (25分)]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52961885</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52961885</guid><author>Van0512</author><pubDate>Sat, 29 Oct 2016 01:20:16 +0800</pubDate><description><![CDATA[在头文件 algorithm 中，还有像merge这样的函数。
算法的选择是多种多样的，选择自己熟悉的。

#include 
#include 
using namespace std;

bool isMergeSort(int *init, int *arr, int n);
int getMergeLength(int *arr, int n);
void mergeSortOnce]]></description><category></category></item><item><title><![CDATA[十进制点分IP转换为32位二进制IP]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52618045</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52618045</guid><author>Van0512</author><pubDate>Thu, 22 Sep 2016 06:23:46 +0800</pubDate><description><![CDATA[先来看看简单的情况：
#include <iostream>
using namespace std;
int main() {
    int *p = new int[3];
    //assignment
    for(int i = 0; i < 3; i++) {
        *(p + i) = i + 1;
    }
    //print in first way.
    fo]]></description><category></category></item><item><title><![CDATA[C++中的struct]]></title><link>https://blog.youkuaiyun.com/Van0512/article/details/52599283</link><guid>https://blog.youkuaiyun.com/Van0512/article/details/52599283</guid><author>Van0512</author><pubDate>Tue, 20 Sep 2016 19:47:45 +0800</pubDate><description><![CDATA[网上很多视频中的知识点都比较旧，很多东西也是自己后来多了解了点才恍然大悟。

虽然各种编程语言一直有在更新标准，例如C++的标准从98到11再到14。
虽然C++11已经被大部分编译器支持了，遗憾的是很多视频的授课内容依旧停留在98标准，甚至不少直接就用了“C语言式”的方法来传授C++的知识，实在有点囧。
————————————————————cut-off line——————————]]></description><category></category></item></channel></rss>