精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《cplusplus (大口小口吃炒飯)》之銘言: : : 最後CPU time 0.422、memory 388,和你說的差不多 : : 謝啦 : : 我再研究看看有沒有更快的方法 : : 排名第1的是 CPU Time Memory : : 0.049 64 : 把以前寫的叫出來看 : if(value<101) ans=91; : else ans=value-10; : 也沒什麼數學 : parse 數字 我是自己 parse : 速度 0.295 參考看看 : 改成上面的試試看 應該會比較快吧 基本上,很多題目的io時間都站蠻大的比例 我想那些速度快過基本c++ io操作的,應該都是用到asm來搞io 那真是太累了,建議可以用c的io,一般來說速度會快一點 通常我都是一次讀進buffer再來處理, 這樣可以減少io functions的呼叫,連續處理起來也比較快速,應該會利用到PIPELINE 像上面提到一直使用getchar,我想會比較慢,我是用gets來一次讀進一整行 gets不是安全的function,一般來說建議使用fgets,不過既然是acm,就沒差了 為了速度,就用gets,輸入比較快速,之後再自己parse,這些都比用scanf快 也如前面所說,printf,scanf都需要parse參數,可能會造成bottlenack 像是這一題,我使用cout的速度就比printf快多了,有點反常, 改天再來測試看看C++的I/O VS C的I/O,也許並不是某一邊全勝 基本上我認為C++的IO可以比C的快,因為C++對不同型態輸入使用overload, 應該只是呼叫正確的function,如果是inline functions的話,應該速度會很快 因為C的需要parse 參數,需要不少工,應該會比C++慢, 不過大家都知道C++的IO是class based,且有複雜的繼承機制,會有不少overhead, 加上IO是很頻繁且不簡單的動作,用成inline也不太合適,可能是慢的原因,真是可惜了 不然如果只是單純地輸入且依形態各自parse,配上inline,應該不會有overhead 且對我來說C++的IO方便多了,不過為了速度,通常會搭配C的IO來使用 同常會這樣改 //read a line string str; char str[MAX_LEN]; getline(cin,str); gets(str); or char str[MAX_LEN]; cin.getline(str,MAX_LEN); //read a char cin.get(); getc(); //read many variables cin>>a>>b>>c; scanf("...",&a,&b,&c);//為了更快可以自己PARSE //parse arbitrary number variables from a line string line; char str[MAX_LEN]; getline(cin,line); gets(str); istringstream in(line.c_str()); char *token=strtok(str," "); while(in>>a) while(token!=NULL) { .... } { ..... token=strtok(NULL," "); } 通常都是C比較快的,至於OUTPUT我就不太清楚了,好像差不多吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.81.235.78