各种数学和几何所用的代码即相关定理

发现自己几何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

组合数恒等公式

C n m = C n 1 m + C n 1 m 1

利用这个公式可以对组合数进行打表
代码如下:

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 ( p a ) ( p b ) ( p c ) 2

其中p为半周长,a,b,c为三边的周长。

猜你喜欢

转载自blog.csdn.net/zhao5502169/article/details/78511813