一些方法技巧的收集(持续更新积累)
0.使用scanf_s
#ifdef ONLINE_JUDGE
#else
#define scanf scanf_s
#endif // ONLINE_JUDGE
1.string与char*,char[]的转化:https://www.cnblogs.com/Pillar/p/4206452.html
2.在打表的时候如果内容过多可以每10个打一个表,这样空间就会大大缩小比如说阶乘的打表
ll base = 1;
for (int i = 1; i < maxn; i++)
{
base = (base * i) % mod;
if (i % 10 == 0)
ary[i / 10] = base;
//对数据叠乘打表,每10个数打一个表
}
3.c++代码最多运算次数
for(ll i = 0;i < 1e15;i++){}(不超时)
for(ll i = 0;i < 1e16;i++){}(超时)
4.优先队列(好用的队列):https://www.cnblogs.com/huashanqingzhu/p/11040390.html
https://www.cnblogs.com/Deribs4/p/5657746.html
5.链式前向星存图:https://www.cnblogs.com/yangsongyi/p/9885608.html
6.把ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
加在main函数的最开始,部分电脑会使得cin,cout比scanf和printf还要快,cin.tie(0);的作用是解除与cout的绑定,但是使用了这个就不能使用scanf和printf了,可能会出问题
参考:https://www.cnblogs.com/LZShuing-xuan/p/12584916.html
https://blog.csdn.net/weixin_44772995/article/details/92839903
7.for(register int i = 0;i < n;i++);register int可以加快这个循环的速度
blog:https://blog.csdn.net/dghcs18/article/details/103335719
8.在题目说精度要在10-4以上的时候,在输出的答案要制定保留的位数(double默认的精度达不到这么多):
printf("%.10lf\n", cont * 1.0 / n);
9.读取一行内容包含空格:https://www.cnblogs.com/linruier/p/9972871.html
10.求一个点到另一个带至少需要多少次,可以用bfs(深度优先算法你)。如果是判断两个点相遇至少需要多少次,那么就可以用双重bfs。例题:https://ac.nowcoder.com/discuss/435795
11.位运算的gcd(最大公约数)超快:https://blog.csdn.net/Ljnoit/article/details/99319849
12.浮点数取整(向上取整ceil,向下取整floor):https://zhidao.baidu.com/question/2269165722450751748.html
13.高性能的随机数算法std::mt19937
blog:https://www.jianshu.com/p/6d9a7de995bb
14.清空队列的三种方法:https://blog.csdn.net/qq_20574421/article/details/80633727
1.queue<int> q1;q1 = queue<int>();
2.while (!Q.empty()) Q.pop();
3.void clear(queue<int>& q) {
queue<int> empty; swap(empty, q);
}</int></int></int></int>