C++でstd::ios::sync_を利用with_stdio(false)TLE問題の解決
5057 ワード
2018-1-23
C++のcinでデータを読み取ることについては、Cのscanfに比べて速度が遅いことが知られています.の
まず、私はランダムに1000000個の整数を生成しました.
次にscanfで読み取りを行い、読み取り時間を計算します.
結果は1.782で、これはwindowsの下のDevの中でコンパイルして実行したので、
この場合の結果は9.701でstd::ios::sync_を加えますwith_stdio(false)
2.166になり、明らかにスピードが速くなりました.
C++のcinでデータを読み取ることについては、Cのscanfに比べて速度が遅いことが知られています.の
まず、私はランダムに1000000個の整数を生成しました.
#include
#include
int main(){
FILE *f=fopen("data.txt","w");
for (int i=0;i<10000000;i++){
fprintf (f,"%d ",rand());
}
return 0;
}
次にscanfで読み取りを行い、読み取り時間を計算します.
#include
#include
#include
int main(){
int start=clock();
FILE *f=freopen("data.txt","r",stdin);
for (int i=0;i<10000000;i++){
int t;
scanf("%d",&t);
}
printf("%.3lf
",double(clock()-start)/CLOCKS_PER_SEC);
retun 0;
}
結果は1.782で、これはwindowsの下のDevの中でコンパイルして実行したので、
#include
#include
#include
#include
using namespace std;
int main(){
int start=clock();
FILE *f=freopen("data.txt","r",stdin);
for (int i=0;i<10000000;i++){
int t;
std::cin>>t;
}
printf("%.3lf
",double(clock()-start)/CLOCKS_PER_SEC);
return 0;
}
この場合の結果は9.701でstd::ios::sync_を加えますwith_stdio(false)
#include
#include
#include
#include
using namespace std;
int main(){
int start=clock();
FILE *f=freopen("data.txt","r",stdin);
std::ios::sync_with_stdio(false);
for (int i=0;i<10000000;i++){
int t;
std::cin>>t;
}
printf("%.3lf
",double(clock()-start)/CLOCKS_PER_SEC);
return 0;
}
2.166になり、明らかにスピードが速くなりました.
cin , ,cin stdin ,
, , cout stdout ,
。 , cin ,
? std::ios::sync_with_stdio(false);
cin stdin 。