编译器:https://royqh1979.gitee.io/redpandacpp/download/

while (T--);  //while 循环只有在 T = 0 时才结束,当循环变量为 负数 时,循环不会停止
for (auto x : num);  //x 为 num 数组中的元素
(r - l + 1) - (r / 2 - (l - 1) / 2);  //区间(l, r)中奇数的个数
sort(a, a + n, [](node a, node b){
	return a.x < b.x;
});  //自定义结构体排序
struct node{
	int k;
	bool operator < (const node &x) const{
		return k < x.k;
	}
}a[N];  //重载结构体比较函数
function < void (LL, LL) > dfs = [&] (LL u, LL p){  //函数内定义一个函数
	sz[u] = 1;
	for (auto v : g[u]){
		if (v == p) continue;
		dfs(v, u);
	}
};
freopen("文件名", "r", stdin);  //读入文件
freopen("文件名", "w", stdout);  //输出文件
int size(512 << 20);
__asm__ ( "movq %0, %%rsp\n"::"r"((char*)malloc(size)+size));
exit(0);//扩大函数栈

输入

char s[MAXN];scanf("%s", s + 1);  //从字符数组第一位开始存字符串

输出

printf("%.*lf", k, num);  //输出指定位数的小数点
for (int i = 1; i <= n; i++)
  cout << ans[i] << " \n"[i == n];  //最后一个输出换行,其它输出空格

其它函数

accumulate(a.begin(), a.end(), init);  //实现累加,前两个参数是范围,init 是累加的初始值
capacity.assign(size, value);  //对不同容器但相容的类型赋值

例:
https://codeforces.com/problemset/problem/1619/D

count(s.begin(),s.end(),k);  //计算范围中(左闭右开) k 的数量

例:
https://codeforces.com/problemset/problem/1569/C
https://codeforces.com/problemset/problem/1620/A

find(s);  //返回字符串中从左向右找到的第一个s的下标
iota(l, r, k);  //给 l 到 r 赋值,从 k 开始,每次 +1,即 num[l] = k, num[l + 1] = k + 1

例:
https://codeforces.com/problemset/problem/1620/E

is_sorted(l, r);  //判断 l 到 r 的范围内的元素是否有序(左闭右开)

例:
https://codeforces.com/problemset/problem/1561/A

lower_bound(begin, end, num);  // begin 到 end - 1 二分查找第一个大于或等于 num 的数字,返回该数字地址,不存在则返回 end
make_pair(a, b);  //等价于pair<type(a), type(b)>(a, b);
capacity.resize(size, value);  //重新定义容器的大小及值

例:
https://codeforces.com/problemset/problem/1622/D

reverse(l,r);  //反转(左闭右开),多用于字符串,数组,容器
rfind(s);  //返回字符串中从右向左找到的第一个s的下标
rotate(a, b, c);  //将 b 到 c 的元素放数组前面,a 到 b - 1 的元素放到数组后面,c 为开的

例:
https://codeforces.com/problemset/problem/1658/C

sort(l,r,cmp);  //排序(左闭右开),cmp可自定义,未定义则默认升序,对字符串也可以进行排序
substr(p,n);  //从p位开始取长度为n的字符串
unique(a + 1, a + n + 1);  //  (左闭右开)返回不重复数字个数,同时将数组中重复数据置于末尾
//注意:该函数只对单调递增的序列有效
upper_bound(begin, end, num);  // begin 到 end - 1 二分查找第一个大于 num 的数字,返回该数字地址,不存在则返回 end
*max_element(l, r);  //在 l 到 r 的范围内找最大的元素

例:
https://codeforces.com/problemset/problem/1569/C

__builtin_popcount(x);  //计算 int 型 x 的二进制中有几个 1

数学知识及位运算操作:

1.
二项式定理:

\((x + y)^n\) = \(C_n^0\)\(x^n\) + \(C_n^1\)\(x^{n - 1}\)y + \(C_n^2\)\(x^{n - 2}\)\(y^2\) + ... + \(C_n^n\)\(y^n\)

令 x = 1, y = 1时,得到

\(C_n^0\) + \(C_n^1\) + \(C_n^2\) + ... + \(C_n^n\) = \(2^n\)

2.
平方和公式

\(\sum_{i = 1}^n i^2 = \frac{n * (n + 1) * (2 * n + 1)}{6}\)

3.
位运算

a ^ (a & b) + b ^ (a & b) = a ^ b

4.
多重组合数

\(n_1\)\(a_1\)\(n_2\)\(a_2\),...,\(n_k\)\(a_k\) 物品,且 \(n_1 + n_2 + ... + n_k = n\),这 \(n\) 个物品进行全排列,总方案数为 \(\frac{n!}{\prod_{i = 1}^{k} n_i !}\)

5.
约数

对于一个数 \(x\)\(x = a_1 * a_2 * ... * a_n\)\(a_i = p_i^0 * p_i^1 * ... * p_i^{k_i}\)
它的约数个数为 \((k_1 + 1) * (k_2 + 1) * .. * (k_n + 1)\)
约数之和为 \((p_1^0 + p_1^1 + ... + p_1^{k_1}) * (p_2^0 + p_2^1 + ... + p_2^{k_2}) * ... * (p_n^0 + p_n^1 + ... + p_n^{k_n})\)

6.
秦九韶算法

将一元 \(n\) 次多项式的求值问题转化为 \(n\) 个一次式的算法。
多项式 \(f(x) = a_nx^n + a_{n - 1}x^{n - 1} + ... + a_1x + a_0\)
转化为 \((... ((a_nx + a_{n - 1})x + a_{n - 2} )x + ... + a_1)x + a_0\)

posted on 2021-09-13 17:15  Hamine  阅读(93)  评论(0编辑  收藏  举报