1

我在 codechef 处为问题代码提供了这个解决方案:FCTRL。

我看到其他人使用相同语言 c 的编译时间(我使用的是 c++ gcc 4.8.1)有点少,我的是 0.46s 而他们是 0.23

如果可能的话,有人可以帮助我减少时间吗?

#include<iostream>
using namespace std;
int main()
{
    long int t,i,temp;
    cin>>t;
    long int n[t],a[t];
    for(i=0;i<t;i++)
    {
        temp=1;
        a[i]=0;
        cin>>n[i];
        while(temp)
        {
            temp=n[i]/5;
            a[i]+=temp;
            n[i]=n[i]/5;
        }
    }
    for(i=0;i<t;i++)
    cout<<a[i]<<"\n";

    return(0);
}
4

2 回答 2

1

根据您的描述,当您使用 c++ 并且他们使用 c 时,这可能是由于编译器如何处理每条指令。

您也可以尝试更换

temp=n[i]/5;
a[i]+=temp;
n[i]=n[i]/5;

经过

temp=n[i]/5;
a[i]+=temp;
n[i]=temp;    //why compute the value again

看看时间是否减少

于 2013-08-22T03:12:02.077 回答
0

您对 C++ 的最大攻击是使用可变长度数组,这些是非标准的。

事实上,事实证明你绝对不需要它们。这个问题可以逐行解决,因此使用数组来保存输入和输出是没有用的。

这是您的简化程序。我还注意到这temp在循环中是无用的(尽管它可能无论如何都被优化了,它污染了代码)。

#include <iostream>

int main()
{
    size_t number = 0;
    std::cin >> number;

    for(size_t i = 0 ; i < number; ++i)
    {
        size_t a = 0, n = 0;

        std::cin >> n;

        while (n)
        {
            n /= 5;
            a += n;
        }

        std::cout << a << '\n';
    }
}

有没有可能做得更好?哦是的!这里的主要问题是C++ 流并不太快,因此您可以通过切换到 C 阅读方法来获得很好的提升......但是它们并不那么好(并且安全)。

于 2013-08-22T07:46:30.027 回答