做题技巧
浮点数eps
判断两个浮点数误差的时候,使用fabs(a-b) < eps
,一般的eps为1e-9
。如果有可能,尽量避免浮点运算,做整数的转换。
计算一元二次方程解的时候,可以进行如此运算,例如((sqrt(8.0*n+1)-1)/2-eps)+1
熟用log函数
多多利用log函数,用以减小数量级。
利用矩阵
矩阵的乘积
有向面积
通过有向面积判断点是否在图形内部
通过行列式的三个点求有向面积
例如:
| x0 y0 1 |
2A = | x1 y1 1 | = x0y1 + x2y0 + x1y2 - x2y1 - x0y2 - x1y0
| x2 y2 1 |
两倍的三角形面积 方法是构建齐次坐标,如果逆时针,有向面积为正,逆时针,有向面积为负。
类型范围
类型 | 范围 |
---|---|
unsigned int | 0~4294967295 |
int | 2147483648~2147483647 |
unsigned long | 0~4294967295 |
long | 2147483648~2147483647 |
long long的最大值: | 9223372036854775807 |
long long的最小值: | -9223372036854775808 |
unsigned long long的最大值: | 18446744073709551615 |
__int64的最大值: | 9223372036854775807 |
__int64的最小值: | -9223372036854775808 |
unsigned __int64的最大值: | 18446744073709551615 |
生成测试数据
比赛的时候出现了100 * 100组数据的情况,但是当时使用freopen忘记了具体的步骤, 特意重新写一下,也是属于基础的内容。
生成一百行数据,每行100个数据,每个数据为100。
#include <stdio.h>
#include <iostream>`enter code here`
using namespace std;
int main()
{
freopen("input", "r", stdin);
freopen("output", "w", stdout);
for(int i = 0; i < 100; i++)
for(int j = 0; j < 100; j++)
printf("%d%c", 100, j == 99? '\n' : ' ');
fclose(stdin);
fclose(stdout);
return 0;
}
运行过后生成的数据(本来应该输出在屏幕上,此时不会输出到屏幕,而是输出到文件)会保存到output文件中。 如果需要使用直接更改output的文件名,再使用一次freopen('r')即可。