注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

GreenCloudS

 
 
 

日志

 
 

BZOJ-1011: [HNOI2008]遥远的行星  

2014-03-02 22:25:00|  分类: bzoj,oi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1011


这里有个神奇的近似公式(传送门:http://hi.baidu.com/zeonsgtr/item/789da6f2838a3dc742c36ab7),然后就可以水过去了。。。不过BZOJ上面略坑C++精度啊,我用double在本地A了在OJ WA个不停,改称long double在本地WA了在OJ上却AC了额。。。


代码:

  • #include <cstdio>

  • #include <algorithm>

  • #include <cstring>

  • #include <cmath>

  •  

  • using namespace std ;

  •  

  • #define ld long double

  • #define g( i ) ( int( a * ( ld )( i ) ) )

  • #define maxn 100100

  •  

  • int n , t ;

  • ld a , f[ maxn ] , m[ maxn ] ;

  •  

  • int main(  ) {

  •     scanf( "%d%llf" , &n , &a ) ;

  •     for ( int i = 0 ; i ++ < n ; ) scanf( "%llf" , m + i ) ;

  •     t = int( sqrt( n ) ) ;

  •     for ( int i = 0 ; i ++ < t ; ) {

  •         f[ i ] = 0 ;

  •         for ( int j = 0 ; j ++ < g( i ) ; ) f[ i ] += ( m[ j ] / ( ld )( i - j ) ) * m[ i ] ;

  •         for ( int j = i + t ; j <= n ; j += t ) {

  •             f[ j ] = ( f[ j - t ] / m[ j - t ] ) * ( ( ld )( j - t - g( j - t ) / ( ld )( 2 ) ) / ( ( ld )j - ( ld )g( j - t ) / ( ld )( 2 ) ) ) ;

  •             for ( int k = g( j - t ) ; k ++ < g( j ) ; ) {

  •                 f[ j ] += ( m[ k ] / ( ld )( j - k ) ) ;

  •             }

  •             f[ j ] *= m[ j ] ;

  •         }

  •     }

  •     for ( int i = 0 ; i ++ < n ; ) printf( "%.10f\n" , double( f[ i ] ) ) ;

  •     return 0 ;

  • }


  评论这张
 
阅读(2)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018