[NKU]sweet @ Google && TopCoder && CodeForces

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  33 Posts :: 1 Stories :: 15 Comments :: 0 Trackbacks
只看了一题……
题意大概是这样,每隔M分钟会来一个飞船并开始等待,每隔N分钟会有一个传送门,传送走等待的飞船……求飞船平均等待时间
(N,M<=1000000000)
相当于求N-(M*i)%N的和(M*i%n==0需要特判停止之类的)……前面一部分可以拆开,求和,上公式,但是后面不行……
于是乎,用新会用的HashMap算了个循环节……但是面对极限数据(循环节==N)貌似还是挂……
万般无奈之际,我通过观察规律,还真发现了一个规律…直接上代码吧……

 1 class Starport{
 2     
 3     long gcd(long n,long m){
 4         if (m==0return n;
 5         return gcd(m,n%m);
 6     }
 7 
 8     public double getExpectedTime(int n,int m){
 9         long tmp=gcd(n,m);
10         long sum=n*n;
11         sum-=n*(n+tmp)/2;
12         double ans=sum;
13         ans/=n;
14         System.out.println(ans);
15         return ans;
16     }
17 }

当然,发现了这个规律之后,可以除n化简之类的,不叙……
Challenge时间,搞掉了一个硬爆的,有个爷们是直接循环的,但是貌似问题不在速度,我没Cha掉……有个爷们代码前面一堆废话,我以为是类似hash的思路,后来才发现最后没用那堆废话,实际上程序还是公式……结果没赚没赔……
rating->1487……又掉成蓝了……我了个去……
其实蓝的不冤,毕竟现在思路还是不咋样,有些东西其实感觉最终可以想出来,但是速度却不能满足竞赛要求……
总之还是奋战吧……
posted on 2010-12-09 02:23 sweetsc 阅读(144) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: