注意事项:
-
不要轻易中途变换思路修改代码
-
发现有样例无法通过可以用if强行通过
-
注意输入输出形式(long long为lld,无符号为llu)。
-
开过1亿的int型数组
-
Long long能读入输出19位数
-
调用函数时是否有放入参数
-
调用函数的参数是否在合理范围内(米勒素数的参数应从2开始)
-
不要在子函数重复定义全局变量(tarjan中cnt重复定义)
-
注意判断与循环的小括号后有没有多加;号
-
当输入数据量特别小并且输入字符的时候很容易出现不合法数据,所以这时候最好不要用scanf要用cin更加安全
-
Prim在稠密图中比Kruskal优,在稀疏图中比Kruskal劣。Prim+Heap在任何时候都有令人满意的的时间复杂度,但是代价是空间消耗极大。【以及代码很复杂>_<】时间复杂度并不能反映出一个算法的实际优劣。
-
竞赛所给的题大多数是稀疏图,所以尽可能地使用Prim+Heap吧,在稀疏图中这是无敌的。如果一定要在朴素Prim和Kruskal里选一个的话那就用Kruskal吧。当然Prim的代码比较简单,对付水题用Prim也无所谓,只要不是极稀疏图两者相差不大
-
勿把find(i)写成find(0)
-
不能在printf中使用%lf。printf()用%f输出double型,而scanf用%lf
-
注意在同一个模块多个循环的循环变量混用
-
要排序的数组范围
-
写博客标注题目出处,注释变量名,题目意思
-
用gets注意是否有读入其他地方的回车,要学会运用printf调试
-
读字符串不要用gets
-
#include<bits/stdc++.h>包含了目前c++所包含的所有头文件
-
C程序默认log()是取自然对数为底,即ln.直接用换底公式表示其他数为底的log,写个简单的表达式就完成了。例如:log2 x写成:log(x)/log(2).exp就是计算e的多少次方
-
在C++下,若要使用C中已有库中的函数如stdio,文件包含方式为前面加一个c,同时去掉.h后缀,如#include <cstdio>,同时必须加上using namaspace;对于其他类似的函数同样;
-
对于C++特有的库,直接用去掉.h后缀的文件包含,并加上using namaspace;
-
#include<bits/stdc++.h>这个头文件包含以下等等C++中包含的所有头文件,不过在国内oj中,poj,hdu 不支持这个函数,这几个oj的编译器问题,其他国外的oj,还有台湾的oj都支持,CF,Topcoder也都支持
-
scanf("%lf %c %lf",&a,&chh,&b);数据输入时,最好严格按照样例留有空格
-
position=max_element(a,a+n)-a;这样写的话就代表的是找到的最大元素的位置在哪里,position代表位置, 值得注意的一点是这个返回的是最大元素的位置,即指针指向第一个最大元素我们用以下方式表示找到的最大元素的值 printf("%d\n",*max_element(a,a+n)); 同时 min_element的用法同上,但是都有一个共同点,就是找到的位置都是第一个最大(小)的元素,即存在多个相同大小的元素的时候找到的是第一个
知识点:
-
快速幂
-
米勒素数:
1 随机取一个 a
2 如果 它不满足 a^(n-1)%n ==1
3 则它一定是 合数
4 退出
5 如果它满足 a^(n-1)%n ==1
6 则它是一个素数的概率是1/2
7 回到 1
if n < 2,152,302,898,747, it is enough to test a = 2, 3, 5, 7, and 11
-
快速幂模:(a*b)%c=(a%c)*(b%c)%c