C ++ Online Judge超时限制

时间:2015-12-23 02:04:48

标签: c++

我刚刚将解决方案发送到用C ++编写的问题COJ。问题是这个链接:http://coj.uci.cu/24h/problem.xhtml?pid=1839
这是我的解决方案:

  #include<iostream>

  using namespace std;

  unsigned int t, n;

  int main(){

     cin >> t;

    while(t > 0 && cin >> n){
        cout<< ( n * 8 ) + 42 << endl;
        t--;
    }
    return 0;
  }

对此,COJ的在线评委说:“超出时间限制”。有人可以解释原因吗?

1 个答案:

答案 0 :(得分:-1)

你可以尝试摆脱std::endl,因为它很慢。相反,你使用'\ n'。代码如下:

#include<iostream>

  using namespace std;

  unsigned int t, n;

  int main(){



    cin >> t;

    while(t > 0 && cin >> n){
        cout<< ( n * 8 ) + 42 << '\n';
        t--;
    }

    cout.flush();
    return 0;
  }

或者您可以尝试printf()来固定您的I / O.

此算法线性增长,不应该是限制因素。我认为 I / O 是限制因素。如果您能找到 log N 的算法,请告诉我。

有人投了票,因为他们认为用标准输出(stdout)做I / O很快。但是,每次迭代后std :: endl 刷新,这会使它变慢。

另一个想法是使用递归,你希望判断系统在尾递归上有很好的优化(这是可能的)。它也可能会更快一些。

在您自己的计算机上,您甚至可以尝试对其进行分析以找到限制因素,如果是I / O,请尝试上述方法。

如果仍然不够快,摆脱面向对象的设计,使用C并直接写入stdout而不是使用printf。

祝你好运!