我在试着解决一个关于CodeChef的问题。我的代码在我的IDE (这里的Visual)中非常好,但是当我在CodeChef上提交我的代码时,它说“超过了时间限制”。
int _tmain(int argc, _TCHAR* argv[])
{
int T;
cin>>T;
int tests[1000];
for(int k=0;k<T;k++) // Take the test cases as input
cin>>tests[k];
for(int i=0;i<T;i++) // the main loop that runs T times
{
int N=tests[i];
int result=2*N-1; // the numerator of the result
int square=N*N; // the denominator of the result
for(int j=2;j<=(N/2);j++)
{
result=result+(N/j)-1;
}
for(int w=2;w<=result;w++) // Loop to convert fraction into irreducible form
{
if(result%w==0 && square%w==0)
{
result=result/w;
square=square/w;
w--;
}
}
cout<<result<<"/"<<square<<endl;
}
return 0;
}如何优化我的这段代码,使其在指定的时限内编译?任何可能的优化?
发布于 2015-06-12 01:43:05
_tmain()和_TCHAR都是微软特有的,是不可移植的.只需让他们分别main()和char。T。即使给出了解释,也可能会使其他人感到困惑,特别是当您最终在某个地方添加模板时。您可以将它重命名为testCases或类似的东西。cout语句更多的意义。发布于 2014-09-30 14:33:47
这将是值得解释一下你做了些什么。无论如何,以下是一些数学事实:
最后一个可能对你有用的事实。
在任何情况下,如果您想优化代码,我建议您编写一些测试用例(具有巨大的值,这样您就可以看到瓶颈所在)。为了编写这些测试,您可能会发现编写具有单个响应性的小函数更为方便。
在这样做时,您可能会意识到,您实际上不需要将输入存储在数组中,只需要在之后遍历数组。你也许可以写这样的东西:
typedef frac // TODO
int get_gcd(int a, int b); // TODO
frac get_proba_as_irreducible(int N); // TODO
void print_proba(frac); // TODO
int _tmain(int argc, _TCHAR* argv[])
{
int T;
cin>>T;
for(int k=0;k<T;k++)
{
int N;
cin >> N;
print_proba(get_proba_as_irreducible(N));
}
return 0;
}https://codereview.stackexchange.com/questions/64269
复制相似问题