为什么我在Lightoj 1176问题上获得TLE?

时间:2019-10-11 07:01:05

标签: c

问题:Ekka和他的朋友Dokka决定购买蛋糕。他们俩都喜欢蛋糕,这就是为什么要在购买蛋糕后分享蛋糕。顾名思义,Ekka非常喜欢奇数,而Dokka非常喜欢偶数,所以他们希望将蛋糕除以Ekka占有N平方厘米的份额,而Dokka占有M平方厘米的份额,其中N是奇数M是偶数N和M均为正整数。

他们希望将蛋糕除以N * M = W,其中W是他们设置的破折号。现在,您知道了他们的冲动因素,您必须确定他们是否可以购买所需的蛋糕。

输入 输入以整数T(≤10000)开头,表示测试用例的数量。

每种情况都包含一个整数W(2≤W <2 ^ 63)。 W将不是2的幂。

输出 对于每种情况,请首先打印情况编号。之后,如果他们不能购买所需的蛋糕,则打印“不可能”。如果他们可以买到这样的蛋糕,则必须打印N和M。如果有多个解决方案,则在M尽可能小的情况下打印结果

时间限制:2秒

我已经尝试过样本输入,并且得到与输出相同的结果。

样本输入

3

10

5

12

用于样本输入的输出

案例1:5 2

情况2:不可能

情况3:3 4

我的代码:

   #include<stdio.h>
   #include<math.h>
   int main()
   {
    int t,k;
    scanf("%d",&t);
    for(k=1;k<=t;k++)
    {


    int a,i,j=1,c;

    scanf("%d",&a);

    for(i=2;i<sqrt(a)+2;i++)
    {
        if(a%i==0 && i%2!=0)

                 c=i;
    }
    int b=a/c;
    if(b%2==0 && b*c==a)
       printf("Case %d: %d %d\n",k,c,b);
    else
        printf("Case %d: Impossible\n",k);



    }
    return 0;
   }

Light OJ为我的解决方案授予TLE。

1 个答案:

答案 0 :(得分:2)

您的解决方案是giving TLE

也许您需要对其进行一些优化。

我建议的一件事是:

如果数字W为not divisible by 2,则打印"Impossible"

如果数字W可被2整除,则将数字除以2,直到becomes an odd number.

因此,生成的奇数将是一个份额,W/odd_number将是其他份额。