题意很简单,就是求之不得
的最小值。
但是,有几个制约
首先,直接平均不等式
过了一段时间,样品过去了,然后变成了WA。
然后当你解决问题时,你会看到拉格朗日乘法。 我能发呆,但我没做过有不等式限制的公式啊。
然后我看了一下拉格朗日乘子法和KTT,但是一个也不懂。 全都是专业的数学术语。 然后直接例题我就不知道了。 写了几个小时。 您的菜真好啊。
后来看了那些大人物的代码,发现都很像。
最后队友想到的是理解上式形象的含义。
到ai/m等点的距离的平方的最小值。 并且对于为负数的点,将对应的pi设为零。
对正数ai/m使用平均不等式。 也不能样品。
然后经过长时间的思考,我发现即使小于零也可以使用平均不等式。
怎么判断呢?
首先,因为pi是大于零的数,ai是-m以上、m以下的数。
假设前I个可以取等号。 I把第1个相加后可以得出等号。
需要这样的判断式
假设右边大的时候也成立。
有这样的公式
处理一下就能得到
得到pi 1时小于0的,由于与题意矛盾,无法满足
# include ' bits/stdc.h ' usingnamespacestd; const double eps=1e-8; #definelowbit(x ) x-x#define pll pairll,ll#define pii pairint,int # definesesecond # definemake _ pair int 1 : -1; }typedef long long ll; typedef unsigned long long ull; const ull hash1=201326611; const ull hash2=50331653; const int N=100000 10; const int M=2048 10; const int inf=0x3f3f3f3f; const ll mod=998244353; ll n,m,a[N],sum[N]; int main () IOs :3360 sync _ with _ stdio (false ); CIN.Tie(0)、cout.tie(0)和cerr.tie(0) ) 0; wile(CINnm ) for ) intI=1; i=n; I () { cin a[i]; }sort(a1,a n 1,greater{} ); LP,q,cnt=n; sum[0]=0; for(intI=1; i=n; I ) (sum ) I )=sum(I-1 ) a ) I ); }for(intI=1; i n; I () if ) a[I1]*Isum[I]-m ) { cnt=i; 黑; } } q=cnt; p=(* (sum[cnt] - m ) ) sum[CNT]-m ); for(intI=CNT1; i=n; I ) { p =a[i] * a[i] * q; } q *=m * m; LD=__gcd(p,q ); p /=d,q /=d; if(p==0) cout '0' endl; elseif(q==1) cout p endl; else cout p '/' q endl; } return 0; }