当时比赛的时候没ac,题目不难,只是没有考虑k1,k2和k是double类型,就一直错了,另外也忘考虑k1+k2>=-1的情况了,还有就是纠结于k<10^18这个条件,用了long long,不清楚double的取值范围,可惜了,我的第一场比赛连初赛都没过,以后要多参加些比赛了。
事后看了别人代码,修改如下:
View Code
1 #include2 #include 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 }