Common Programming Concepts
Common Programming ConceptsComment12345// 单行注释/*多行注释*/
Variables and Mutabilitylet$rust$ 基本变量默认不可变
使用 $let$ 关键字声明变量
1234let x = 5;println!("x = {x}");// 输出 x = 5// x = 6; // Error! cannot assign twice to immutable variable
也可以显示声明变量类型
格式 data_name: type
12let x: i32 = 5;println!("x = {x}");// 输出 x = 5
变量名小写,大写 $warning$ 警告!
123456789let X = 5;println!("{}", X);// warning: variable `X` should have a snake case name/*help: convert t ...
Dynamic Programming
$ Dynamic \ Programming $$$Tecy$$
线性 $dp$ 引入Frog 1问题陈述有$N$块石头,编号为$1, 2, \ldots, N$。每块$i$($1 \leq i \leq N$),石头$i$的高度为$h_i$。
有一只青蛙,它最初在$1$号石头上。它会重复下面的动作若干次以到达石块$N$:
如果青蛙目前在石块$i$上,则跳到石块$i + 1$或石块$i + 2$上。这里需要付出$|h_i - h_j|$的代价,其中$j$是要降落的石块。
求青蛙到达石块$N$之前可能产生的最小总成本。
$f_{i}$ 表示到达 $i$ 所需花费
$ f_{i} = min(f_{i - 1} + |h_{i} - h_{i - 1}|, f_{i - 2} + |h_{i} - h_{i - 2}|)$
复杂度 $O(N)$
main code123456789101112131415int n;cin >> n;vector<int> val(n);for(auto& x : val){ cin >& ...
Other
OtherInt12812345678910111213141516171819202122232425inline void read(__int128& x) { int f = 1; x = 0; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') f *= -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } x *= f;}inline void print(__int128 x) { if (x < 0) { putchar('-'); x = -x; } if ...
Math
MathModInt123456789101112131415161718192021template<int MOD>struct ModInt { unsigned x; ModInt() : x(0) { } ModInt(signed sig) : x(sig) { } ModInt(signed long long sig) : x(sig% MOD) { } int get() const { return (int)x; } ModInt pow(long long p) { ModInt res = 1, a = *this; while (p) { if (p & 1) res *= a; a *= a; p >>= 1; } return res; } ModInt& operator+=(ModInt that) { if ((x += that.x) >= MOD) x -= ...
Geometry
GeometryPoint1234567891011121314151617181920212223242526272829303132333435363738394041424344454647const long double eps = 1e-9;struct point { long double x; long double y; point(long double _x = 0, long double _y = 0){ x = _x; y = _y; } long double square_length() const { return x * x + y * y; } //模长 long double length() const { return sqrtl(x * x + y * y); } friend point operator+(const point& lp, c ...
Game
GameBash$1$堆石子,$n$个, 每次每人能取$[1, m]$个石子,不能拿的输
conclusion$(m + 1) \mid n$ 时,先手必败
$(m + 1) \nmid n$ 时, 先手必胜
prove
当$n \le m$时, 先手可直接取走所有
当$n = m + 1$时,先手无论取走多少个,后手都能取走剩下所有
当$n = k \times(m + 1)$时,对于每$m+1$个石子,先手取$i$个,后手取的$m+1−i$个
当$n = k \times (m + 1) + x (0 < x < m + 1)$时,先手取$x$个,局势回到上一种情况
Nim$n$堆石子,每堆$a_i$个,每人每次能从一堆石子中取任意多个石子但不能不取,不能拿的输
conclusion$\bigoplus\limits_{i = 1}^{n}a_i = 0 $时,先手必败
$\bigoplus\limits_{i = 1}^{n}a_i \neq 0 $时,先手必胜
proveWythoff$2$堆石子,$x, ...
Data Structure
$Created \ by \ GitSteve1025$
$Web \ Page: $ Data Structure
SplaySplay 操作规定:每访问一个节点 $x$ 后都要强制将其旋转到根节点。
每次对 $x$ 做一次 splay 步骤, $x$ 到根节点的距离都会更近。
Splay 步骤有三种,具体分为六种情况:
rotatezig当 $p$ 是根节点,$x$ 是 $p$ 的左子节点时操作。
zag当$p$是根节点,$x$是$p$的右子节点时操作。
zig-zig当 $p$ 不是根节点,$p$ 和 $x$ 都是左子节点时操作。
zag-zag当$p$不是根节点, $p$ 和 $x$ 都是右子节点时操作。
zig-zag当 $p$ 不是根节点,$p$ 是左子节点, $x$ 是右子节点时操作。
zag-zig当 $p$ 不是根节点,$p$ 是右子节点, $x$ 是左子节点时操作。
可以看出 zig 和 zag 互为镜像操作
更详细的教程 Splay
HashHash function得到 $key$ ,一般是 $X \ mod \ TableSize$ 。
Solv ...
Python
Basicexegesis123456789# 单行注释'''多行注释'''"""多行注释"""
Output123456789101112131415161718192021222324# print 语法# print(value, ... , sep = ' ', end = '\n', file = None)# sep 表示分割符 end 表示换行 file 文件# print 字符串 写法S = "SCUT" # 定义字符串 Sprint(S)print('SCUT')print("SCUT") # 建议和 cpp 保持一致print('''SCUT''')print("""SCUT""")print('S' + ...
Java
基础基本和 $C++$ 一样
注释12345// 单行注释/*多行注释*/
数据类型123456789int;long;short;float;double;byte;boolean;final // = C++ const
循环 & 条件12345678910//和 C++ 一样while;do-while;for;break;continue;if-else;switch;
函数 $(function)$12345type function_name (parameters) { //implement }//重载 同 C++
基础类Math1234567891011121314abs(); // 绝对值ceil(); // 向上取整floor(); // 向下取整round(); // 四舍五入max();min();pow();log();sin();cos();sqrt();atan();atan2();random();
Character1234567isLetter();isDigit();isUpperCa ...