Daybreak活动赛一

B.Save Energy! [CodeForces - 937C](http://codeforces.com/problemset/problem/937/C)

题意:

用一只火炉加热cooker来烤鸡,火炉每k分钟会自动关掉,Julia每d分钟会去开一次炉子(如果火炉是开着的不动,关着则打开),这只鸡在火炉开着的时候t分钟能熟,关着的时候2*t分钟能熟,求烤熟鸡所需分钟数?

解析:

当k%d == 0时,火炉会一直开着,所以ans = t;

否则的话,找到周期T,当d > k 时, D = d,当 d < k 时,T = 大于k的d的倍数,即大于k的第一次开启的时间,此时相对于t来说,周期内烤的时间是(2*k) + abs(k-d)的一半,然后分两种情况讨论,在火炉开着的时候烤熟和在关着的时候烤熟。

代码:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 typedef long long LL;
 5 
 6 int main()
 7 {
 8     LL  k,d,t;
 9     double ans = 0;
10     scanf("%lld%lld%lld",&k,&d,&t);
11     if(k % d == 0)
12       ans = (double)t;
13     else
14     {
15         if(k > d) d = (k - k%d) + d;
16         LL x = 2*k + abs(k-d);
17         LL y = (2*t)/x;
18         LL z = (2*t)%x;
19         if(z <= 2*k) ans = (y*d) + (double)(z*1.0)/2;
20         else         ans = (y*d) + k + (double)(z-2*k);
21     }
22     printf("%f\n",ans);
23     return 0;
24 }
View Code

 

posted @ 2018-03-02 13:13  天晨破晓  阅读(179)  评论(0)    收藏  举报