-1

链接上给出了编写程序目的的详细信息:https ://www.codechef.com/problems/COOKMACH/

和错误

超过时间限制

      Sub-Task  Task   #       Score    Result (time)

         1        0    NA       AC       (0.000000)

         1        1    NA       TLE      (1.010000)

         1        2    NA       TLE      (1.010000)

         1        3    NA       TLE      (1.010000) 



        Final Score -> 0.000000 Result - TLE 

         2        4    NA        TLE      (1.010000)

         2        5    NA        TLE      (1.010000)

         2        6    NA        TLE      (1.010000) 

         7      NA     WA                 (0.000000)

最终分数 - 0.000000 结果 - TLE

代码是

#include <stdio.h>
int main(void)
{
    int test, set, des, a = 1, ctr = 0, str = 0, x;
    scanf("%d", &test);
    if (test > 0 && test <= 200)
    {
        for (x = 0; x < test; x++)
        {
            ctr = 0;
            scanf("%d", &set);
            scanf(" %d\n", &des);
            if ((set > 0 && set <= 10000000) && (des > 0 && des <= 10000000))
            {
                if (set <= 100 && des <= 100)
                {
                    if (set == des)
                        ctr = 0;
                    if (set == 1)
                    {
                        while (set != des)
                        {
                            set = set * 2;
                            ctr++;
                        }
                    }
                    else if (set != 1)
                    {
                        if (des % 2 == 0)
                        {
                            while (a < des)
                            {
                                a = a * 2;
                                str++;
                            }
                        }

                        if (a == des || des == 1)
                        {
                            if (set < des)
                            {
                                if (set % 2 == 0)
                                {
                                    while (set != des)
                                    {
                                        set = set * 2;
                                        ctr++;

                                    }
                                }
                                else if (set % 2 == 1)
                                {
                                    set = (set - 1) / 2;
                                    ctr++;
                                    while (set != des)
                                    {
                                        set = set * 2;
                                        ctr++;
                                    }
                                }
                            }
                            if (set > des)
                            {

                                if (set % 2 == 0)
                                {

                                    while (set != des)
                                    {
                                        set = set / 2;
                                        ctr++;

                                    }
                                }
                                else if (set % 2 == 1)
                                {
                                    set = (set - 1) / 2;
                                    ctr++;
                                    while (set != des)
                                    {
                                        set = set / 2;
                                        ctr++;
                                    }
                                }
                            }
                        }
                    }
                }
                printf("%d\n", ctr);
            }
        }
        return 0;
    }
}
4

3 回答 3

0

您可以通过使用适合您的程序的正确算法来克服 TLE,这可以通过查看程序约束轻松确定。

您可以参考本教程,其中清楚地解释了以下几点-

  1. 什么是 TLE?

  2. 为什么会发生 TLE?

  3. 如何克服 TLE?

于 2019-06-09T12:36:05.633 回答
0

用这个:

C / C++

ios_base::sync_with_stdio(false); 
cin.tie(NULL) ;

Python

import psyco
psyco.full()

Java不要使用 Scanner 类,BufferedReader而是使用。

于 2020-12-27T18:48:16.450 回答
0

更多地关注按位运算符,例如位移和两个整数的按位交换。我的解决方案看起来像

#define swap(a, b) (a ^= b, b ^= a, a ^= b)

int main() {
    long a, b;
    int count, T;
    scanf("%d", &T);
    while (T--) {
        scanf("%ld%ld", &a, &b);
        for (count = 0; a & (a - 1); a >>= 1)
            ++count;
        if (a > b)
            swap(a, b);
        for (; a < b; a <<= 1)
            ++count;
        printf("%d\n", count);
    }
    return 0;
}
于 2015-09-08T12:22:25.020 回答