更快的输入和输出
Faster input and output
#include<iostream>
using namespace std;
int main(){
int i,x,max=0;
cin>>x;
int a[x];
for(i=0;i<x;i++){
cin>>a[i];
if(max<a[i]){
max=a[i];}
}
int b[max+1];
for(i=0;i<max+1;i++){
b[i]=-1;
}
for(i=0;i<x;i++){
if(b[a[i]]==-1){
b[a[i]]=1;
}
else{
b[a[i]]++;
}
}
i=0;
while(i<=max){
while(b[i]>0&&b[i]!=-1){
cout<<i<<endl;
b[i]--;
}
i++;
}
return 0;
}
伙计们,我尝试了索引方法进行排序,代码厨师展示了它。。这个问题的复杂性不是o(n),而是更接近于它。。。问题的时间限制为5秒,源限制为50000字节。。
关于如何通过更快的i/o或代码计算来提高性能的任何帮助。。。
我很确定您的代码有问题,因为您在循环中使用cout << x << endl;
,该循环将打印大量行。
我几分钟后会带着"不同"回来。
编辑:无论哪种方式,我都不确定自己能做出多大的改变。显然,根据编译器的不同,它可能会有很大的变化,但对于我的g++-O2和100000个输入数字,使用endl;
需要0.16-0.18秒,使用'n'
输出需要0.06-0.07秒。
使用printf
不比cout
快,但scanf
比cin
快一点(0.04s+/-0.05)
然而,这确实与sync_with_stdio
有关。如果我们使用cin.sync_with_stdio(false);
,那么scanf
和cin
的结果是相同的。
所有的测量都是以文件作为输入,以文件作为输出进行的——写入外壳需要更长的时间,但这是因为它正在从我身边滚动10万行文本。
(在许多系统上,如果max
大于约100万,则程序会因"大"输入或大量输入而崩溃,代码会因堆栈外而崩溃,对于较低的值也可能发生这种情况)
避免cin和cout,而是使用C IO函数scanf或printf
相关文章:
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++多个输入和输出
- 制定带有输入和输出C++的时间表
- 字符的输入/输出操作
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- C++ 中的矢量重复输出输入
- 类中的重载函数(Students())是输出输入的信息,但它不起作用
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 在输出输入文本时对齐输入的文本
- 将多个文件输出/输入到桌面
- 输出输入c++的最短方式
- 将Crypto++中自动种子PNRG的输出输入一个字符串
- 输出输入的拼接版本