[英]Time Limit Exceeded in C++ Online Judge
我刚刚发送了一个用 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 的在线法官说:“超出了时间限制”。 有人可以解释为什么吗?
您可以尝试摆脱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。
祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.