//一个电脑美化资源网站:https://zhutix.com/
//LaTeX用法:http://www.mohu.org/info/symbols/symbols.htm
//作文素材:m.zwsc8.com
//图论画图网站:https://csacademy.com/app/graph_editor/
1.最大公约数和最小公倍数的乘积就是原两个数的积(別說我菜了)
2.一个数被 11 整除的充要条件是:这个数奇数位上数字和 − 偶数位上数字和被 11 整除
3.pipe是linux关键字
4.if else嵌套一定要写else if
5.语句不要写在break后面
6.scanf("%c",&opt);會出錯,用scanf的話最好用opt[2]
7.欧几里得距离:dis=sqrt( (x1*x2) + (y1*y2) )
曼哈顿距离:dis=abs(x1-x2)+abs(y1-y2)
切比雪夫距离:dis=max( abs(x1-x2) , abs(y1-y2) )
切比雪夫距离和曼哈顿距离的转化:曼哈顿(x,y)<=>切比雪夫((x+y)/2,(x-y)/2)
8.做乘法的時候可能需要轉long long
9.dfs序:https://blog.csdn.net/qq_39670434/article/details/78425125
10.组合数学求方案数時常常拿所有方案減去不可行方案
11.康托展开公式:X=a[n]*(n-1)! +a[n-1]*(n-2)!+....+a[1] * 0!
12.100023323 100021121两个质数
13.组合数:C(n,m)=C(n,n-m)
C(n,m)=C(n-1,m)+C(n-1,m-1) (杨辉三角)
C(n,0)+C(n,1)+.......+C(n,n)=2^n
14.prufer序列相关:https://blog.csdn.net/morejarphone/article/details/50677172
http://www.cnblogs.com/dirge/p/5503289.html'
17.凡是11111..... 22222..... 33333.....之类的序列都可用这个式子来表示:k*(10^x-1)/9
18.乘法取模爆longlong要写快速乘
19.对于点(a,b) (x,y)连成的线段而言(其中a>x,b>y), 在它们中间有gcd(a-x,b-x)-1个整点
当选定(0,0)为起点时,和终点(i,j)所形成的向量上就会有gcd(i,j)个整数点
20.盒子放小球问题:http://www.cnblogs.com/sdfzsyq/p/9838857.html
21.从左下角走到n*m矩阵的右上角,方案数是C(n+m,n(或m)),把向上和向右看作一个序列,从中选择向上走m次/向右走n次的方案数
22.位运算请加括号
23.STL中sort原理:https://www.cnblogs.com/fengcc/p/5256337.html
24.博弈论:https://www.cnblogs.com/nanjoqin/p/10211576.html
25.手写栈:
在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈。
方法其实也很简单。
基本思路上,我们就是用栈不断的pop,push。但是何时push,何时pop呢?
在《算法导论》上对深度优先遍历树的讲解中,在深度遍历中,会对每个节点进行染色,白色为没有被访问过;灰色为被访问过,但是该节点的所有子树还没有完成访问;黑色,节点被访问过,而且该节点的所有子树都被完全的访问。
所以,我们就通过颜色标记来进行判断了。
整体的框架如下:
memset(vis,0,sizeof(vis));
stack S;
S.push(root)
while(!S.empty()){
int u = S.top();
if(vis[u] == 1)// if node is gray, then color black
{
vis[u] = 2;
// do things after dfs children.
S.pop();
}
else if(vis[u] == 0)// if node is white, then color gray
{
vis[u] = 1;
// do things before dfs children.
for all children v
S.push(v);
}
}
---------------------
原文:https://blog.csdn.net/u012139398/article/details/44300475
26:绝对值可以去掉分类讨论
27.二分写法
1.最小值最大化
int l = min_ans, r = max_ans; while (l < r) { int mid = (l + r + 1) / 2; //+1避免 r == l + 1 时mid一直等于l,从而死循环 if (ok(mid)) //符合条件返回True l = mid; else r = mid - 1; }
2.最大值最小化
1 int l = min_ans, r = max_ans; 2 while (l < r) { 3 int mid = (l + r) / 2; 4 if (ok(mid)) //符合条件返回True 5 r = mid; 6 else 7 l = mid + 1; 8 }
2019-10-6:
各种题目要注意有没有无解情况注意判没有
快速幂特判指数为0时返回1
2019-10-11
a|b - a&b 竟然是 a^b !!!
2019-10-15
最短路的必经边如何求?我们统计S到T的最短路条数,如果一条边cnt[S][u]*cnt[v][T]=cnt[S][T],那么这条边就是必经边。