信息学奥林匹克竞赛常用系统函数

针对信息学奥林匹克竞赛(通常简称为信奥赛)的常用函数,以下是一份详细的文档。这份文档旨在帮助参赛者更好地理解和使用这些函数,以便在编程比赛中提高效率和准确性。

一、数学函数

1. C/C++ 标准库数学函数(需包含 <cmath>

函数说明示例
abs(x)整型绝对值abs(-5) = 5
fabs(x)浮点型绝对值fabs(-3.14) = 3.14
pow(x, y)x的y次幂pow(2, 3) = 8.0
sqrt(x)平方根sqrt(16) = 4.0
cbrt(x)立方根(C++11)cbrt(27) = 3.0
hypot(x, y)计算直角三角形的斜边hypot(3, 4) = 5.0
exp(x)e的x次幂exp(1) ≈ 2.71828
log(x)自然对数(以e为底)log(10) ≈ 2.30259
log10(x)常用对数(以10为底)log10(100) = 2.0
log2(x)以2为底的对数(C++11)log2(8) = 3.0
sin(x)正弦(x为弧度)sin(3.14159/2) ≈ 1.0
cos(x)余弦cos(0) = 1.0
tan(x)正切tan(0.7854) ≈ 1.0
asin(x)反正弦asin(1) = π/2
acos(x)反余弦acos(0) = π/2
atan(x)反正切atan(1) = π/4
atan2(y, x)计算y/x的反正切atan2(1, 1) = π/4
ceil(x)向上取整ceil(3.2) = 4.0
floor(x)向下取整floor(3.8) = 3.0
round(x)四舍五入round(3.5) = 4.0
trunc(x)截断小数部分trunc(3.9) = 3.0
fmod(x, y)浮点数取余fmod(5.3, 2) = 1.3
remainder(x, y)带舍入的余数remainder(5.3, 2) = 1.3

2. 算法竞赛常用数学技巧

 

 

二、输入输出函数

1. C风格输入输出

函数说明效率
scanf()格式化输入
printf()格式化输出
getchar()读取单个字符
putchar()输出单个字符

 

 

2. C++风格输入输出

函数说明效率
cin标准输入流较低
cout标准输出流较低
getline()读取一行中等

 

 

三、字符串处理函数

1. C风格字符串函数(需包含 <cstring>

函数说明时间复杂度
strlen(s)字符串长度O(n)
strcpy(dest, src)复制字符串O(n)
strcat(dest, src)连接字符串O(n)
strcmp(s1, s2)比较字符串O(n)
strstr(haystack, needle)查找子串O(n×m)
strchr(s, c)查找字符O(n)
memcpy(dest, src, n)内存复制O(n)
memset(ptr, val, n)内存设置O(n)

 

 

2. C++字符串函数(需包含 <string>

 

 

四、排序与查找函数

1. 排序函数(需包含 <algorithm>

 

 

2. 查找函数

 

 

五、容器相关函数

1. Vector(动态数组)

 

 

2. Set/Multiset(集合)

 

 

3. Map(映射)

 

 

4. 优先队列(堆)

 

 

六、算法函数

1. 常用算法函数(需包含 <algorithm>

 

 

七、实用工具函数

1. 随机数生成

 

 

2. 位运算函数

 

 

八、竞赛专用技巧

1. 快速读入/输出(整数)

 

 

2. 常用宏定义

 

 

九、注意事项

  1. 效率优先:竞赛中优先使用C风格函数(scanf/printf)

  2. 内存管理:注意数组大小,避免越界

  3. 浮点数比较:使用eps避免精度问题

     

     

  4. 时间复杂度:理解每个函数的时间复杂度

  5. 平台差异:某些函数在不同编译器可能有差异

十、常用头文件总结