发现自己几何sb,还是总结一下
已知三点求圆心,但三点不能共线
Point Getcir(Point A,Point B,Point C){//给予三个点,求圆心。
double a = 2*(B.x - A.x);
double b = 2*(B.y - A.y);
double c = (B.x*B.x+B.y*B.y) - (A.x*A.x+A.y*A.y);
double d = 2*(C.x-B.x);
double e = 2*(C.y-B.y);
double f = (C.x*C.x + C.y*C.y) - (B.x*B.x + B.y*B.y);
double x = (b*f-e*c)/(b*d-e*a);
double y = (d*c-a*f)/(b*d-e*a);
double r = sqrt((x-A.x)*(x-A.x) + (y-A.y)*(y-A.y));
Point ans(x,y);
R = r;
return ans;
}
对于一个水平的数轴,其上有N个点找到一个点使其距离和最小,那么这个点是中位数那个点。。
如图
无论是奇数和点还是偶数个点,都相当于是两两配对。这种肯定是最佳的。注意千万不要误认为是平均值的点是最小的。应为选平均值,除非平均值是中位数,否则一定会在两两配对的基础上多个点到平均值的距离。可以画图看下。注意!~!
参考题:http://acm.henu.edu.cn/problem/problempage?id=1013
乘积最大定理:
把一个数拆分成多个不同的数相加,求他们的成绩最大值时,把这个数拆成从2开始的多个连续的数得到的乘积是最大的。
例题:http://acm.hdu.edu.cn/showproblem.php?pid=5976
组合数恒等公式
利用这个公式可以对组合数进行打表
代码如下:
const int MAX = 3010;
typedef long long ll;
ll C[MAX][MAX];
void init(){
for(int i=0;i<=3000;++i){
C[i][0] = 1;
for(int j=1;j<=i;++j){
C[i][j] = C[i-1][j] + C[i-1][j-1];
}
}
}
海伦公式求三角形面积:
其中p为半周长,a,b,c为三边的周长。