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|\).

posted @ 2025-10-31 09:12  Ydoc770  阅读(10)  评论(0)    收藏  举报