前言
这系列blog记录我读算法笔记的时,遇到的trick,备忘。
读书笔记
①
key | value |
---|---|
int | 1 0 9 10^9 109 |
long long | 1 0 18 10^{18} 1018 |
给long long 型数据赋大于
2
31
−
1
2^{31}-1
231−1的初值时,要在初值后加LL
(很少用,但记录下来)
②宏定义#define其实是直接将对应的部分替换。
建议不要使用#define。定义常量时直接用const,定义表达式时,直接定义函数
③
const int INF = (1<<31)-1;
④
ch=getchar() 字符输入
ch=putchar()字符输出
scanf:
字符串使用%s读入的时候以空格和换行读入作为结束的标准
gets,puts:
读取字符串,以换行符\n作为结束,
如果真的要读入一行输入,就用gets
%c 可以读入空格和换行
注意 题目通常是现输入一个数字N,再输入字符串。所以你要把输入的数字N后面的空格用getchar()吃掉。如下:
/* 输入
* 10
* hello world
* world hello
*/
int N;
char temp[100];
scanf("%d",&N);
getchar(); //这个空格别忘了吃掉
//do something
gets(temp);
int sscanf ( const char * s, const char * format, …)
int sprintf ( char * str, const char * format, … )
这两个函数是 string scanf,string printf。在不使用C++的string时,这两个函数是字符串神器。sscanf把字符串转变成一切。sprintf把一切转变成字符串 。
而且还能提取出字符串中有用的信息
scanf的输入是stdin,sscanf的输入便是第一个参数(const char*s),这样便可以把字符串变为一切
举例
int a;
char str[100]="11";
sscanf(str, "%d", &a);
printf("%d", a);
// output:11
printf的输出是stdout,sprintf的输出便是第一个参数(const char*s),这样便可以把一切变成字符串
举例
int a = 10;
char str[100];
sprintf(str, "%d", a);
printf("%s", str);
//output:10
C字符串函数
#include <string.h> // 或者<cstring>
strlen() //字符串长度,不包括\0
strcmp(s1, s2) //按字典序比大小
// s1 < s2 -> 负数
// s1 ==s2 ->0
// s1 > s2 -> 正数
strcpy() //复制
strcat(s1, s2) // 类似与 s1 =s1+s2
⑤printf:%和\不会输出哦,除非加了 %%,\\
亲测有效。但没有用上
⑥
%md | 右对齐,用空格填充 |
---|---|
%0md | 右对齐,用0填充. |
%.mf | 保留m位小数输出 |
非常重要 程序运行时间有用到
要求格式化 的题目都会用上
⑦
fabs(double x) double绝对值函数
floor(double r)double向下取整
ceil(double r)double向上取整
我觉得你使用这个函数时,心里应该有个坐标轴,这样负数的情况也能搞清楚
⑧pow(double p,double r)
p
r
p^{r}
pr
⑨sqrt(double)
s
q
r
t
(
x
)
sqrt(x)
sqrt(x)
log(double)
log是以自然对数为底,我觉得应该会有题目要求任意底数的log,用换底公式
l
o
g
b
a
log^{a}_{b}
logba =
l
o
g
e
a
/
l
o
g
e
b
log^{a}_{e} / log^{b}_{e}
logea/logeb
⑩
都是以弧度为单位哦。 弧度=
p
i
∗
度
数
/
180
pi *度数/180
pi∗度数/180
const double pi = acos(-1);
sin(double)
cos(double)
tan(double)
asin(double)
acos(double)
atan(double)
暂时没用过
⑾
round(double)
或者可以使用下面的代替:
floor(x+0.5)
⑿在函数里不能创建很大的数组。如果要,则创建在函数外。
⒀浮点数的比较
由于浮点数的存储不总是精确的,所以会给浮点数的比较带来极大的干扰.所以要引入一个极小数eps对这种误差进行修正
const double eps = 1e-8
等于
如果 ab ,那么 a 应该落在 [b-eps,b+eps]
> 大于
如果a>b,那么a应该落在[b+eps,
+
∞
+∞
+∞]
< 小于
如果
a
<
b
a<b
a<b,则a应该落在[
−
∞
-∞
−∞,b-eps]
>= 大于等于
如果a>=b,则a应该落在[b-eps,
+
∞
+∞
+∞]
<= 小于等于
如果a<=b,则a应该落在[
−
∞
-∞
−∞,b+eps]