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;
    }
  • 相关阅读:
    C# 协变 逆变
    go slice 理解
    为什么避免使用Task.Wait或者Task.Result
    IL笔记
    docker随笔
    领域事件
    总结笔记
    基于ASP.NET Core 3.x的端点路由(Endpoint Routing)实现控制器(Controller)和操作(Action)分离的接口服务
    CentOS7 多IP搭建SOCKS5代理服务器
    Springboot 实现数据库备份还原
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/5696217.html
Copyright © 2011-2022 走看看