ICPC Live Archive 5110 ..超出时限

时间:2014-10-04 06:06:37

标签: c++ c optimization

ICPC 2010 regionals 是一个问题。

问题名称:方形自由数

为什么我的代码变得 TLE ,即使我使用了最少数量的循环?请帮忙......

问题链接:

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=380&page=show_problem&problem=3111

我的代码:

#include <stdio.h>
#include <math.h>

int main()
{

    int t;
    scanf("%d", &t);
    while(t--)
    {
        long long int n,k;
        scanf("%lld", &n);

        int i,j,power,mx;
        mx = 0;

        for(i = 2; i < n; i++)
        {
            if(n % i == 0)
            {

                    long long int m = n;
                    power = 0;

                    while(1)
                    {
                        int temp= m;
                        m = m/i;
                        if(m*i == temp)
                        {
                            power++;
                        }
                        else
                        {
                            break;
                        }
                    }

                        if(power >= mx)
                        {
                            mx = power;
                        }
            }
        }

        if(mx == 0)
        {
            mx++;
        }

        printf("%d\n", mx);

    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您的代码中有3个级别的循环:

  1. while(t--)
  2. for(i = 2; i < n; i++)
  3. while(1)
  4. 前两个循环导致重复n*t次,并且根据问题描述,在最坏的情况下1E10次。这将导致大多数在线评委的TLE。

    解决方案:更改算法。