信息學競賽中的讀入比較與其他讀入方法
阿新 • • 發佈:2018-08-23
信息 32位系統 cin def 時間 fread tdi fine with
目錄
- 註意事項
- 輸入輸出時間測試
註意事項
讀入註意這幾點
- 如果關閉同步:ios::sync_with_stdio(false)
那麽cin和scanf不能混用.- 不同系統下的longlong讀入不一樣.32位系統與64位系統longlong讀入(或輸出)時的格式不一樣,32位系統下的讀入(輸出)是printf("%I64d,*x);
而64位的是scanf("%lld",&x);
而我們可以這樣.
### scanf ifdef WIN32 #define LL "%64d" #else #define LL "%lld" #endif
讀入(輸出)的時候
直接scanf(LL,&x)
是不是很好用,當然我們完全可以使用cin,cout.(未關閉同步的cin,cout異常慢)
輸入輸出時間測試
1e7的數據 :cin 12.13
scanf 9.718
read 2.996
cout 20.91
printf 30.35
關閉同步後的cin 2.18
puts 1.47秒
不過我發現還是輸入read,輸出puts快.
以及具有非常快的速度的輸入.時間是scanf的\(1/10\)
const int BUF_SIZE = 30; char buf[BUF_SIZE], *buf_s = buf, *buf_t = buf + 1; #define PTR_NEXT() { buf_s ++; if (buf_s == buf_t) { buf_s = buf; buf_t = buf + fread(buf, 1, BUF_SIZE, stdin); } } #define readint(_n_) { while (*buf_s != '-' && !isdigit(*buf_s)) PTR_NEXT(); bool register _nega_ = false; if (*buf_s == '-') { _nega_ = true; PTR_NEXT(); } int register _x_ = 0; while (isdigit(*buf_s)) { _x_ = _x_ * 10 + *buf_s - '0'; PTR_NEXT(); } if (_nega_) _x_ = -_x_; (_n_) = (_x_); }
信息學競賽中的讀入比較與其他讀入方法