编译器: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\)