Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我在Lightoj 1176问题上得到TLE?_C - Fatal编程技术网

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

C 为什么我在Lightoj 1176问题上得到TLE?,c,C,问题:Ekka和他的朋友Dokka决定买一块蛋糕。他们都喜欢蛋糕,这就是为什么他们买了蛋糕后想分享蛋糕的原因。顾名思义,Ekka非常喜欢奇数,Dokka非常喜欢偶数,他们想把蛋糕分成N平方厘米,Dokka得到M平方厘米,其中N是奇数,M是偶数。N和M都是正整数 他们想要分割蛋糕,使得N*M=W,其中W是他们设置的冲刺因子。现在你知道了他们的冲刺因素,你就得看看他们是否能买到想要的蛋糕 输入 输入以整数T开始≤ 10000,表示测试用例的数量 每个案例都包含一个整数w2≤ W>2除以2来测试它是否

问题:Ekka和他的朋友Dokka决定买一块蛋糕。他们都喜欢蛋糕,这就是为什么他们买了蛋糕后想分享蛋糕的原因。顾名思义,Ekka非常喜欢奇数,Dokka非常喜欢偶数,他们想把蛋糕分成N平方厘米,Dokka得到M平方厘米,其中N是奇数,M是偶数。N和M都是正整数

他们想要分割蛋糕,使得N*M=W,其中W是他们设置的冲刺因子。现在你知道了他们的冲刺因素,你就得看看他们是否能买到想要的蛋糕

输入 输入以整数T开始≤ 10000,表示测试用例的数量

每个案例都包含一个整数w2≤ W<2^63。W不是2的幂

输出 对于每个案例,首先打印案例编号。在那之后,如果他们买不到他们想要的蛋糕,就不可能打印出来。如果他们可以买这样的蛋糕,你必须打印N和M。如果有多个解决方案,那么打印结果,其中M尽可能小

时限:2秒

我尝试了样本输入,得到了与输出相同的结果

样本输入

三,

十,

五,

十二,

样本输入的输出

案例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;
   }
光给了我的解决方案TLE。

你的解决方案给了TLE

也许你需要对它进行一些优化

我建议的一件事是:

如果数字W不能被2整除,则无法打印

如果数字W可以被2整除,则继续将该数字除以2,直到它变成奇数


因此,生成的奇数将是一个共享,而W/odd_数将是另一个共享。

通常,人们会使用探查器和其他计时技术来找出代码中的热点和瓶颈。但在在线评委/竞赛网站上,这是不可能的,不仅因为你不能使用这些工具,甚至在代码计时方面,而且因为他们很少告诉你他们作为你的程序输入的数据。如果你想用正确的方法学习C,那就去读一些书,或者上几节课。这将使你成为一个比这类网站更好的程序员。问题陈述说W可以大到2^63,这不适合整数变量。尝试使用long-long。你的代码很可能还有其他问题。如果a是素数,那么在你的循环之后c会有什么值?除此之外:欢迎使用SO。请尝试为您的问题找到一个有用的标题。对于没有参加任何编码竞赛的人来说,这个标题没有任何意义,也可能不会吸引很多读者。@Gerhardh如果a是素数,答案将是“不可能的”。谢谢你的建议。既然W是整数,你可以用W&1=0,用W>>2除以2来测试它是否应该是W>>1?