码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1011

时间:2017-10-24 01:28:42      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:max   register   ret   style   return   a*   play   else   code   

题目真是没谁了??~~看了半天,交完后发现自己比别的大佬慢了好多,于是去借鉴了一下,然后发现由于精度我们可以卡一下~~

      对于星球j,我们要求的和式为ik=1mk?mjj?k

  当j很大时,i也不会太大,我们可以把式子化成ik=1mk?mjj?0.5i

  用sumi表示前i个星球的质量和,那么和式可以化成sumi?mjj?0.5i

    这样我们就可以少用一个变量技术分享k,复杂度就降为了技术分享技术分享技术分享技术分享

----转自CtrlCV

代码

技术分享
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
const int maxn=100000+10;
double m[maxn],sum[maxn];
int main()
{
  int n;
  double a,ans;
  scanf("%d%lf",&n,&a);
  for(int j=1;j<=n;j++)
  {
    int i=(int)(a*j+1e-8);
    scanf("%lf",&m[j]); 
    ans=0;
    if(j<=500)
     for(register int k=1;k<=i;k++)
      ans+=m[k]*m[j]/(j-k);
    else
     ans=sum[i]*m[j]/(j-i/2);
     printf("%lf\n",ans);
     sum[j]=sum[j-1]+m[j];
  }
  return 0;
}
View Code

 

bzoj1011

标签:max   register   ret   style   return   a*   play   else   code   

原文地址:http://www.cnblogs.com/new-hand/p/CtrlCV.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!