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 }


浙公网安备 33010602011771号