我在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);
}
答案 0 :(得分: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
看看是否有一些时间减少
答案 1 :(得分:0)
你对C ++的最严重攻击是使用Variadic-Length数组,那些是非标准的。
事实上,事实证明你绝对不需要它们。这个问题可以在每行的基础上解决,因此使用数组来保存输入和输出是没用的。这是你的程序,简化。我还注意到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';
}
}
有可能做得更好吗?哦,是的!这里的主要问题是the C++ streams are none too fast所以你可以通过切换到C读取方法得到很好的推动......但是它们并不那么好(而且安全)。