jzoj4485-[GDOI 2016 Day1]第一题 中学生数学题【数学】
生活随笔
收集整理的這篇文章主要介紹了
jzoj4485-[GDOI 2016 Day1]第一题 中学生数学题【数学】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目大意
給出n0,k,p0n_0,k,p_0n0?,k,p0?
然后有兩問,求
解題思路
對于第一問,欽定定義p′=?kp?p'=\lfloor kp\rfloorp′=?kp?,然后
?n0?kp?(p?p0)=?kp2+(n0+kp0)p?n0p0\lfloor n_0-kp\rfloor (p-p_0)=-kp^2+(n_0+kp_0)p-n_0p_0?n0??kp?(p?p0?)=?kp2+(n0?+kp0?)p?n0?p0?
轉換為p′p'p′
?p′k+(n0k+p0)p′?n0p0-\frac{p'}{k}+(\frac{n_0}{k}+p_0)p'-n_0p_0?kp′?+(kn0??+p0?)p′?n0?p0?
然后a=?1k,b=n0k+p0,c=?n0p0a=-\frac{1}{k},b=\frac{n_0}{k}+p_0,c=-n_0p_0a=?k1?,b=kn0??+p0?,c=?n0?p0?
之后用公式?b2a-\frac{b}{2a}?2ab?計算出ppp的最優值。
對于第二問,我們可以暴力枚舉k?p1k*p_1k?p1?然后在用公式計算p2p_2p2?。
codecodecode
#include<cmath> #include<cstdio> #include<algorithm> using namespace std; double n0,p0,k,ans; int main() {//freopen("math.in","r",stdin);//freopen("math.out","w",stdout);scanf("%lf%lf%lf",&n0,&p0,&k);double a=-1/k,b=n0/k+p0,c=-p0*n0;double p=-b/(2*a);printf("%.3lf",(n0-round(p))*(round(p)/k-p0));for(double p1=0;p1<=n0;p1++){double n1=(n0-p1),y=(n0-p1)*(p1/k-p0);double a=-1/k,b=p1/k+p0,c=n0*p1/k-n0*p0-p1*p1/k;double p2=-b/(2*a);ans=max((p1-round(p2))*(round(p2)/k-p0)+y,ans);}printf(" %.3lf",ans); }總結
以上是生活随笔為你收集整理的jzoj4485-[GDOI 2016 Day1]第一题 中学生数学题【数学】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu5115-Dire Wolf【区间
- 下一篇: 小众不易撞的情侣名 小众不易撞的情侣名有