Alex Li的学习笔记

不想学习…

暑假预习的C++,突然发现有笔记,然后就发现我就学了一点就没学了,主要内容为C++的变量类型、命名空间和类,主要学习与C不同的内容,更多为了写算法。

变量类型

自动变量类型

Auto类型

auto 是C++11引入的一个关键字,用来自动推断变量的类型。也就是说,你声明变量时,不用显式写出类型,编译器会根据初始化表达式自动推断变量的类型。

int a = 2;
auto b = a;//b的数据类型也是int

const int a = 2;
auto b = a;//b的数据类型的const int

auto a;//错误,必须有初始化定义

也可以用来写函数的返回类型。

auto 可以推断出const类型和指针,但是无法推出引用类型。

阅读全文


本节内容主要为高精度运算、前缀和与差分的主要思想和代码。

高精度

基本思想

常考类型:

  • $A+B$ ,两个的位数大约在 $10^6$ 。
  • $A-B$ ,两个的位数大约在 $10^6$ 。
  • $A\times a$ , $A$ 位数大约 $10^6$ ,$a<10^9$ 。
  • $A \div b$ , $A$ 位数大约 $10^6$ ,$b<10^9$ 。

如何存储

使用数组进行存储,每一个位置存一个数,个位数存到开头(数组0位置)。

如何运算

竖式加减乘除,每一位是 $(A_i+B_i+t) \% 10$ ,其中 $t$ 为上一位运算的进位。

阅读全文


本节内容为部分排序和查找算法,数据结构课讲过,不过当时期末时间紧,没去听课,虽然PPT看懂了,但是从没有自己完整敲过,现在原理也都忘了,学一遍发现确实有些地方容易写错。

快速排序

核心思路

主要思想:分治

  1. 确定分界点:q[l]或者q[(l+r)/2]或者q[r]
  2. 调整范围:目标是左边的数都小于等于x,右边的数都大于等于x(分界点不一定是x);
  3. 递归处理左右两端

第2步实现

暴力算法

  1. 开两个数组a[ ]和b[ ];
  2. 把q[ ]中从l到r遍历:

    • q[i]<=x 放入a;
    • q[i]>x 放入b;
  3. 把a[ ]和b[ ]放入q[ ]中

常用思路

  1. 设定两个指针,从左右两端开始:

    • 左指针从左向右寻找第一个大于等于基准的元素
    • 右指针从右向左寻找第一个小于等于基准的元素
  2. 找到之后交换两个元素
  3. 持续移动左右指针并交换元素,直到两个指针相遇,此时结束

阅读全文


前情提要是想暑假预习点东西,学了点java和面向对象之后发现忘得太快了,还是得自己多敲一下,以及记点笔记方便看。故先通过菜鸟教程自学了一些markdown,顺便之前的阿里云300学生券快到期了,又开了台服务器,所以搭了个笔记站。

文本格式

字体

粗体语法:

这个是**粗体**
这个也是__粗体__

斜体语法:

这是*斜体*
这个也是_斜体_

粗斜体(前两个组合)语法:

这个是***粗斜体***
这个也是___粗斜体___

阅读全文


基本工具

编译器选项

-std=c++11

文件读入

#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif

快速读入

inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*f;
}

阅读全文