模板——杂项
模板——杂项
Clion 配置快捷键,KMP,LCA,SG 函数,二进制相关,数位 DP,费马平方和定理,对抗搜索。
Clion 配置快捷键
输入全称反而出不来。
- Duplicate Entire Lines —— Alt+Shift+向下箭头
- Add Selection for Next Occurrence —— CtrI+D
- Move Line Down —— Alt+向下箭头
- Move Line Up —— Alt+向上箭头
- Delete Line —— Ctrl+Q
- Run —— F5
- Debug —— F6
KMP
kmp[i] 即为 border。长度减去 border 为循环节。
1 |
|
LCA
1 |
|
SG 函数
把一堆石子分成多堆石子:子游戏取异或和。
一堆石子被取走一些石子:前驱状态取 mex。
1 |
|
二进制相关
- 用数表示集合。数的二进制的第 \(i\) 位的 01 状态可表示一个元素是否在集合中。
- \(\operatorname{lowbit}(x)\) 表示数
\(x\) 的最低的为 \(1\)
的一位。
lowbit(x)=x&(-x)。 - 判断 \(x\) 是不是 \(y\) 的子集:
x&y==x。 - \(x\) 和 \(y\) 的交集
x&y,并集x|y。 - \(x\) 是 \(y\) 的子集时,\(y-x\):
x^y。 - 枚举 \(S\)
的子集:
for(int i=S;i;i=i-1&S)。其中 \(i\) 是 \(S\) 的子集。 - 判断 \(s\) 从右边数第 \(i\) 位是否为 \(1\):
s&(1<<(i-1))。 - 把 \(s\) 从右边数第 \(i\) 位变成 \(1\):
s|(1<<(i-1))。
数位 DP
合法号码是不含前导零的 \(11\) 位的数字,要出现至少 \(3\) 个相邻的相同数字;号码中不能同时出现 \(8\) 和 \(4\)。
给定 \(l\) 和 \(r\)(不含前导零, \(11\) 位),求 \([l,r]\) 区间的合法号码数量。
1 |
|
费马平方和定理
费马平方和定理:奇素数 \(p\) 可以表示为两个正整数的平方和,当且仅当 \(p\) 是 \(4k+1\) 型的。并且在不考虑两个正整数顺序的情况下,这个表示方法唯一。
对抗搜索
一个 \(n\times n\)(\(n\ge 2\))棋盘上有黑白棋子各一枚。游戏者 A 和 B 轮流移动棋子,A 先走。
- A 的移动规则:只能移动白棋子。可以往上下左右四个方向之一移动一格。
- B 的移动规则:只能移动黑棋子。可以往上下左右四个方向之一移动一格或者两格。
和通常的“吃子”规则一样,当某游戏者把自己的棋子移动到对方棋子所在的格子时,他就赢了。
两个游戏者都很聪明,当可以获胜时会尽快获胜,只能输掉的时候会尽量拖延时间。告诉你 \(n\) 和黑白棋子的坐标,你的任务是判断谁会赢,需要多少回合。
1 |
|