(多校第二场1001)HDU5734 Acperience

来源:互联网 发布:mac安装千牛 编辑:程序博客网 时间:2024/05/17 09:17

推个公式:

∑(W[i]+B[i]*a)^2=∑W[i]^2+n*a^2+2*a*∑B[i]W[i];

对于x=a,y=n*x^2+2*x*∑B[i]W[i];  是一元二次方程,所以min(∑W[i]^2+n*a^2+2*a*∑B[i]W[i])=∑W[i]^2-(∑B[i]W[i])^2/n,可得当∑B[i]W[i]取最大值时,∑(W[i]+B[i]*a)^2取最小值。

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<algorithm>#include<queue>#define LL long longusing namespace std;int main(){int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);LL num1=0,num2=0;for(int i=0;i<n;++i){LL temp;scanf("%lld",&temp);num1+=temp*temp;num2+=abs(temp);}num2*=num2;LL gcd=__gcd(num1*n-num2,(LL)n);printf("%lld/%lld\n",(num1*n-num2)/gcd,n/gcd);}}



0 0
原创粉丝点击