当时比赛的时候没ac,题目不难,只是没有考虑k1,k2和k是double类型,就一直错了,另外也忘考虑k1+k2>=-1的情况了,还有就是纠结于k<10^18这个条件,用了long long,不清楚double的取值范围,可惜了,我的第一场比赛连初赛都没过,以后要多参加些比赛了。
事后看了别人代码,修改如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <stdio.h> 2 #include <stdbool.h> 3 4 int main(void) 5 { 6 #ifdef LOCAL 7 freopen("in", "r", stdin); 8 #endif 9 10 int T, n; 11 double k1, k2, k, k0, a, sum; 12 int t, i, d; 13 scanf("%d", &T); 14 for(t = 1; t <= T; t++) 15 { 16 scanf("%d%lf%lf%lf", &n, &k1, &k2, &k); 17 sum = 0; 18 for(i = 0; i < n; i++) 19 { 20 scanf("%lf", &a); 21 sum += a; 22 } 23 if(sum > k) 24 { 25 printf("Case #%d: 0\n", t); 26 continue; 27 } 28 k0 = k1 + k2; 29 if(k0 <= 1 && k0 >= -1) 30 { 31 printf("Case #%d: inf\n", t); 32 continue; 33 } 34 d = 0; 35 while(true) 36 { 37 d++; 38 sum *= k0; 39 if(sum > k) break; 40 } 41 printf("Case #%d: %d\n", t, d); 42 } 43 return 0; 44 }