zoukankan      html  css  js  c++  java
  • HDU_5734_数学推公式

    题意:给一个向量W={w1,w2……,wn},和一个向量B,B的分量只能为1和-1。求||W-αB||²的最小值。

    思路:一来一直在想距离的问题,想怎么改变每一维的值才能使这个向量的长度最小,最后无果。

      看了题解说是推公式,并且将结果看作是方差,这样W中的负值可直接转化为正值,也即将B所有分量当作1(这里需要想一下),所以只需要看α,当结果为方差时最小,也即α为均值,根据||x||=√∑xi²,将平方项展开,观察思考一下应该可以化解为(n∑wi²-sum²)/n

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    long long gcd(long long a,long long b)
    {
        if(a==0)
            return b;
        if(b==0)
            return a;
        if(a<b)
        {
            long long term=a;
            a=b;
            b=term;
        }
        while(a%b)
        {
            long long mo=a%b;
            a=b;
            b=mo;
        }
        return b;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            long long sum=0,ans1=0,ans2=n,num;
            for(int i=0;i<n;i++)
            {
                scanf("%I64d",&num);
                if(num<0)
                    num*=-1;
                sum+=num;
                ans1+=n*num*num;
            }
            ans1-=sum*sum;
            //cout<<"*"<<endl;
            long long tmp=gcd(ans1,ans2);
            //cout<<ans1<<"*"<<ans2<<endl;
            printf("%I64d/%I64d
    ",ans1/tmp,ans2/tmp);
        }
        return 0;
    }
  • 相关阅读:
    小程序登陆流程解析
    小程序连续点击bug解决
    小程序开发文本空格的添加
    微信小程序转支付宝小程序
    支付宝小程序开发入门
    微信小程序开发入门
    text属性
    小程序横向滚动
    will-change
    Docker 系列二(操作镜像).
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/5696217.html
Copyright © 2011-2022 走看看