只看了一题……
题意大概是这样,每隔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==0) return 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……又掉成蓝了……我了个去……
其实蓝的不冤,毕竟现在思路还是不咋样,有些东西其实感觉最终可以想出来,但是速度却不能满足竞赛要求……
总之还是奋战吧……