CSP-S 考前 to-do list
-
复习:线性筛、ST 表、图论连通性、最短路板子、差分约束、树剖、KMP、Manacher、高斯消元、欧拉路径相关、笛卡尔树、平衡树、同余最短路.
-
学习:bitset、exgcd、各种数论神秘定理.
复习
学习
bitset
内部通过压位来大幅优化空间和位运算效率,常数为 \(O({1\over w})\),通常 \(w=32\).
定义
bitset<10000> b;定义一个大小为 \(10000\) 的bitset.
初始化
bitset( ):全赋值为 \(\text{false}\).bitset(unsigned long val):赋值为 \(val\) 的二进制表示.bitset(const string &str):赋值为 0/1 串 \(str\).
运算符
bitset 支持 cin/cout 读写,可以用 [] 访问某一位.
bitset 之间支持所有正常位运算操作,包括二进制位移,以及判断是否相等.
常用成员函数
size( ):返回大小.count( ):返回 \(\text{true}\) 的个数.any( )/none( )/all( ):存在/没有/全为 \(\text{true}\) 时返回 \(\text{true}\),否则返回 \(\text{false}\).set( )/reset( ):全部设为 \(\text{true/false}\).to_string( )/to_ulong( )/to_ullong( ):转换为字符串/unsigned long/unsigned long long表达._Find_first( )/_Find_next(pos):找第一个/下一个为 \(\text{true}\) 的位置,如果不存在则返回size( ).
exgcd
用以快速求形如 \(ax+by=\gcd(a,b)\) 的一组整数解. 核心思路在于用欧几里得算法的等式 \(\gcd(a,b)=\gcd(b,a\bmod b)\) 来推式子.
令 \((x_1,y_1)\) 为一组合法解,有:
\[ax_1+by_1=\gcd(a,b)
\]
令 \(a'\leftarrow b,b'\leftarrow a\bmod b\),设 \(x_1\leftarrow x_2,y_1\leftarrow y_2\),有:
\[bx_2+(a\bmod b)y_2=\gcd(b,a\bmod b)
\]
\[bx_2+(a-\lfloor{a\over b}\rfloor\times b)y_2=\gcd(b,a\bmod b)
\]
\[ay_2+b(x_2-\lfloor{a\over b}\rfloor y_2)=\gcd(b,a\bmod b)
\]
即有 \(x'\leftarrow y,y'\leftarrow x-\lfloor{a\over b}\rfloor y\).
递归边界为 \(b=0\),此时赋值 \(x=1,y=0\) 可以递归反解出一组 \((x,y)\). 可以证明,结果满足 \(x\le |b|,y\le|a|\).

浙公网安备 33010602011771号